C专家编程207页编程挑战的问题
写了如下程序:
#include <stdio.h> void func(char ca[]){ printf("%p %p %p\n", &ca, &(ca[0]), &(ca[1])); } void func2(char *pa){ printf("%p %p %p\n", &pa, &(pa[0]), &(pa[1])); } char abc[3] = {'A','B','C'}; int main(){ func(abc); func2(abc); return 0; } #include <stdio.h> void func(char ca[]){ printf("%p %p %p\n", &ca, &(ca[0]), &(ca[1])); } void func2(char *pa){ printf("%p %p %p %p\n", &pa, &(pa[0]), &(pa[1]), ++pa); } char abc[3] = {'A','B','C'}; int main(){ func(abc); func2(abc); return 0; }#include <stdio.h>#define CHECK(a) check(#a,a)char* check(char*name, char* p){ printf("checking %s --> %p\n", name, p); return p;}void func(char ca[]){ printf("%p %p %p\n", &ca, &(ca[0]), &(ca[1]));}void func2(char *pa){ printf("%p %p %p %p\n", &pa, CHECK(&(pa[0])), CHECK(&(pa[1])), CHECK(++pa));}char abc[3] = {'A','B','C'};int main(){ func(abc); func2(abc); return 0;}
[解决办法]
pa是个指针变量,&pa是变量pa自身的地址 0x22ac50;
pa是变量pa中保存的值,这个值才是数组abc的地址 0x402000。
printf(&pa, &(pa[0]), &(pa[1]), ++pa)