P7 数组做函数参数退化问题
程序员文章站
2023-12-31 13:07:40
...
#include <iostream>
using namespace std;
#include <string>
//void printfArray(int a[],int num)
void printfArray(int *a, int num)
{
int i;
for (i = 0; i < num; i++)
cout << a[i] << " ";
}
//void sortArray(int a[],int num)
void sortArray(int *a, int num)
{
int i, j, tmp;
int num2 = sizeof(a) / sizeof(a[0]);
cout << num2 << " ";
//num2=1; 表明形参a是一个指针
//实参的a 和 形参的a 的数据类型本质不一样
//形参中的数组,编译器会把它当成指针处理 这是C语言的特点
//排序
//外层循环 当i=0的时候,让j从1===N进行变化
//外层循环 当i=1的时候,让j从2===N进行变化
//外层循环 当i=2的时候,让j从3===N进行变化
for (i = 0; i < num; i++)
{
for (int j = i + 1; j < num; j++) //内层循环:a[i]和a[j]比较
{
if (a[i] < a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
}
//数组做函数参数的退化问题 退回一个指针,
//1 结论:把数组的内存首地址和数组的有效长度穿给被调用函数
//2 实参的a 和 形参的a 的数据类型本质不一样
// 形参中的数组,编译器会把它当成指针处理 这是C语言的特点
//3 本质也剖析 形参写在函数上,和写在函数体内是一样的,只不过是具有对外的属性而已
int main()
{
int i = 0;
int num = 0;
int a[] = {33,654,4,455,6,33,4,4,5,5,1,4,23,33333332,2};
num = sizeof(a) / sizeof(a[0]);
cout << endl;
cout << "排序之前:" << endl;
printfArray(a,num);
cout << endl;
sortArray(a,num);
cout << "排序之后:" << endl;
printfArray(a,num);
cout << endl;
return 0;
}