前阵子看了一下c专家编程,有些东西有了深入的了解。
就按照他说的做了一下练习,发现文章不少啊!
先贴代码吧。
以下为代码段1:
#include <stdio.h> void array_1(char ca[]); void array_2(char* pa); char ga[]={'b','c','d','e','f'}; int main() { printf("&ga=%d &(ga[0])=%d &(ga[1])=%d\n",&ga,&(ga[0]),&(ga[1])); // printf("&ga=%d ga[0]=%d ga[1]=%d\n",&ga,ga[0],ga[1]); array_1(ga); array_2(ga); getchar(); return 0; } void array_1(char ca[]) { printf("%d\n",&ca); printf("%d\n",&(ca[0])); printf("%d\n",&(ca[1])); }void array_2(char* pa) { printf("%d\n",&pa); printf("%d\n",&(pa[0])); printf("%d\n",&(pa[1])); printf("%d\n",++pa); }
以下为代码段2:
#include <stdio.h>
void array_1(char ca[]);
void array_2(char* pa);
char ga[]={'b','c','d','e','f'};
int main()
{
printf("&ga=%d &(ga[0])=%d &(ga[1])=%d\n",ga,&(ga[0]),&(ga[1]));
// printf("&ga=%d ga[0]=%d ga[1]=%d\n",&ga,ga[0],ga[1]);
array_1(ga);
array_2(ga);
getchar();
return 0;
}
void array_1(char ca[])
{
printf("%d\n",ca);
printf("%d\n",&(ca[0]));
printf("%d\n",&(ca[1]));
}
void array_2(char* pa)
{
printf("%d\n",pa);
printf("%d\n",&(pa[0]));
printf("%d\n",&(pa[1]));
printf("%d\n",++pa);
}
输出结果如下:
从以上可以分析出:
1、代码段1中,&ga输出的为数组ga的首地址,而代码段2中ga的输出同代码段1的&ga
这就验证了在&和sizeof时 数组名代表整个数组,而其他情况下数组名均为数组首地址。
2、从代码段1中可以看出&pa和&ca输出的仅为pa和ca的变量地址,而代码段2中,由于pa和ca所指都为数组首地址,所以输出相同。