- 论坛徽章:
- 0
|
看 C 专家编程(徐波译),p216,“玩转数组/指针参数”的例子。简写如下:- #include <stdio.h>
- char ga[] = "abcdefg";
- void array_func(char ca[10]) {
- printf(" addr of array param = %#x \n", &ca);
- printf(" addr (ca[0]) = %#x \n", &(ca[0]));
- printf(" addr (ca[1]) = %#x \n", &(ca[1]));
- printf(" ++ca = %#x \n\n", ++ca);
- }
- int main(void) {
- printf(" addr of global array = %#x \n", &ga);
- printf(" addr (array[0]) = %#x \n", &(ga[0]));
- printf(" addr (array[1]) = %#x \n\n", &(ga[1]));
- array_func(ga);
- return 0;
- }
复制代码 我执行的结果:- [fyodor @ ~]$ ./work/gcc/diff_addr_arry
- addr of global array = 0x8049708
- addr (array[0]) = 0x8049708
- addr (array[1]) = 0x8049709
- addr of array param = 0xbfb223f0
- addr (ca[0]) = 0x8049708
- addr (ca[1]) = 0x8049709
- ++ca = 0x8049709
- [fyodor @ ~]$ ./work/gcc/diff_addr_arry
- addr of global array = 0x8049708
- addr (array[0]) = 0x8049708
- addr (array[1]) = 0x8049709
- addr of array param = 0xbfad3930
- addr (ca[0]) = 0x8049708
- addr (ca[1]) = 0x8049709
- ++ca = 0x8049709
复制代码 每次还不同。怀疑是 stack 中对 array_func 参数动态分配了 ca 的地址。
请教诸位。 |
|