恩,刚好看到数组这一块,如下代码是证明数组作为参数的时候,数组名退化为指针: 
- #include <stdio.h>
 
  
- char testCharArr(char a[])
 
 - {
 
 -                 printf("%p\n", a);//作为参数的数组a的首地址 
 
 -                 printf("%p\n", &a);// 
 
 -         return sizeof(a);
 
 - }
 
  
- int main(int argc, char *argv[])
 
 - {
 
 -         char a[10];
 
 -                 printf("%p\n", a);//数组a的首地址 
 
 -         printf("%d\n", testCharArr(a));
 
  
-         return 0;
 
 - }
 
  复制代码 
 
输出: 
0028FF16 
0028FF16 
0028FF00 
4 
可以看出在main函数中声明的数组a的首地址,与将数组a作为参数调用后,在函数testCharArr中接收到的数组地址相同,也就是说传参是将数组a的地址传过去了,那么函数中的形参保存的就是一个指针,指向原来数组的首地址。函数中的形参是一个新的指针,这个指针指向的地址才是原数组的地址,这个形参本身的地址是创建的新指针的地址。 |