恩,刚好看到数组这一块,如下代码是证明数组作为参数的时候,数组名退化为指针:
- #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的地址传过去了,那么函数中的形参保存的就是一个指针,指向原来数组的首地址。函数中的形参是一个新的指针,这个指针指向的地址才是原数组的地址,这个形参本身的地址是创建的新指针的地址。 |