如何理解数组作为函数参数时,数组名就是指针?

来源:互联网 发布:360跑分软件 编辑:程序博客网 时间:2024/06/13 22:40

在《Expert C Programming》这本书中,第202页有这样一句话:在函数参数的声明中,数组名被编译器当着指向该数组第一个元素的指针。通过实例测试,这句话的意思就是:在声明这个参数的整个函数作用域内,数组名就是指针。

见测试用例:

 

代码注释从代码运行结果得到,从代码注释来分析:

1.在main()中,arr等价于&arr; 而在fun()和fun2中,ca不等价与&ca。原因就是上面说的:在声明ca这个参数的函数fun的整个作用域内,数组名就是指针,ca是指针,&ca就是指针的地址;而在main中,arr是数组名,arr和&arr都是数组第一元素的地址。

从而导致:fun函数中的printf("%x/n",&ca); 打印出数组第一个元素的地址的地址;而main函数中的printf("%x/n",&arr);打印出数组第一个元素的地址。

2.任何时候,当数组是字符串数组时,使用printf和cout打印字符串,只要打印的内容是数组某个元素的地址,即可打印出以这个元素开始的整个字符串。

例如:fun函数中:printf("%s/n",&(ca[0]));cout<<"&(ca[1]) = "<<&(ca[1]);

而当数组不是字符串数组时,当打印的内容是数组某个元素的地址时,打印的就是实际的地址。

 

补充:sizeof(数组名),得到的是整个数组的长度。

 

 

原创粉丝点击