数组做函数参数,会退化为指针。
首先说明数组名和指向指针不是一回事。
看下面程序:
#include<stdio.h>
#include<stdlib.h>
void main()
{
int a[10];
int *p;
p = a;
printf("a的大小:%d \n",sizeof(a));
printf("p的大小:%d \n",sizeof(p));
system("pause");
}可以看出其结果并不同,本质原因是数据类型不一样。int a[10]; 其表示一种数组数据类型。这里也可以typedef int (Myarray) [10];程序就可以这样改写:
#include<stdio.h>
#include<stdlib.h>
typedef int (Myarray) [10];
void main()
{
Myarray a;
int *p;
p = a;
printf("a的大小:%d \n",sizeof(a));
printf("p的大小:%d \n",sizeof(p));
system("pause");
}从上面也可以看出数组名和指向其的指针不同,但是数组做函数参数,会退化为指针。看下面的例子:#include<stdio.h>
#include<stdlib.h>
void test(int a[10])
{
printf("函数test a的大小:%d \n",sizeof(a));
}
void main()
{
int a[10];
int *p;
p=a;
printf("a的大小:%d \n",sizeof(a));
printf("p的大小:%d \n",sizeof(p));
test(a);
system("pause");
}
从测试结果可以看出数组做函数参数,c/c++编译器会把它当做指针,也不会主动的多分配内存,其会退化成指针。
459

被折叠的 条评论
为什么被折叠?



