/*=============================================================
认识二维数组中的行列指针差异,明白a+i=a[i]=*(a+i)=&a[i]=&a[i][0]
a+i代表指向第i行的指针a+i与&a[i]等价,而*(a+i)是指向列与a[i]等价
,a[i][0]是代表第i行第0个元素的地址。 虽然这几个元素代表的地址是相同的,但是
代表意义却不同
==============================================================
作者:最后的村长
时间:2009年10月28日
工具:DEV C++ 4.9.9.2
version:1.0
==============================================================*/
#include
#include
//#define FORMAT(x,y) "%d,%d\n"
/*=============================================================*/
int main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int n=sizeof(a[0][0]);
printf("数组a一共有12个元素,包括3行4列,每行4个元素,每列3个元素\n");
printf("a=%d,*a=%d\n",a,*a);
printf("a size=%d,*a size=%d\n",sizeof(a),sizeof(*a));
printf("a包含的元素个数是:%d,*a包含元素个数是:%d\n",sizeof(a)/n,sizeof(*a)/n);
//a的大小与数组大小相同,*a代表了第0行的首地址,包含四个元素
printf("-------------------------------------------\n");
printf("a[0]=%d,*(a+0)=%d\n",a[0],*(a+0));
printf("a[0] size=%d,*(a+0)=%d\n",sizeof(a[0]),sizeof(*(a+0)));
printf("a[0]包含的元素个数是:%d,*(a+0)包含元素个数是:%d\n",sizeof(a[0])/n,sizeof(*(a+0))/n);
//a[0]与*(a+0) 等价代表第0行的首地址,包含4个元素
printf("-------------------------------------------\n");
printf("&a[0]=%,&a[0][0]=%d\n",&a[0],&a[0][0]);
printf("&a[0] size=%d,&a[0][0] size=%d\n",sizeof(&a[0]),sizeof(&a[0][0]));
printf("&a[0]包含的元素个数是:%d,&a[0][0]包含元素个数是:%d\n",sizeof(&a[0])/n,sizeof(&a[0][0])/n);
//&a[0]代表第0行0列的地址,&a[0] [0]也是如此
printf("-------------------------------------------\n");
printf("a[1]=%d,a+1=%d\n",a[1],a+1);
printf("a[1] size=%d,a+1=%d\n",sizeof(a[1]),sizeof(a+1));
printf("a[1]包含的元素个数是:%d,a+1包含元素个数是:%d\n",sizeof(a[1])/n,sizeof(a+1)/n);
//a[1]代表第1行元素首地址,包含4个元素,而a+1也应代表第1行的首地址,但是怎么仅包含1个元素???
printf("-------------------------------------------\n");
printf("&a[1][0]=%d,*(a+1)+0=%d\n",&a[1][0],*(a+1)+0);
printf("&a[1][0] size=%d,*(a+1)+0 size=%d\n",sizeof(&a[1][0]),sizeof(*(a+1)+0));
printf("&a[1][0]包含的元素个数是:%d,*(a+1)+0)包含元素个数是:%d\n",sizeof(&a[1][0])/n,sizeof(*(a+1)+0)/n);
//&a[1][0]代表第1行第0列元素地址,包含1个元素,而*(a+1)+0也应代表第1行第0列元素的地址,包含1个元素
printf("-------------------------------------------\n");
printf("a[2]=%d,*(a+2)=%d\n",a[2],*(a+2));
printf("a[2] size=%d,*(a+2) size=%d\n",sizeof(a[2]),sizeof(*(a+2)));
printf("a[2]包含的元素个数是:%d,*(a+2)包含元素个数是:%d\n",sizeof(a[2])/n,sizeof(*(a+2))/n);
//a[2]代表第2行元素首地址,包含4个元素,而*(a+2)也代表第2行的首地址,包含4个元素
printf("-------------------------------------------\n");
printf("&a[2]=%d,a+2=%d\n",&a[2],a+2);
printf("&a[2] size=%d,a+2 size=%d\n",sizeof(&a[2]),sizeof(a+2));
printf("&a[2]包含的元素个数是:%d,a+2包含元素个数是:%d\n",sizeof(&a[2])/n,sizeof(a+2)/n);
//&a[2]代表第2行元素首地址,应包含4个元素,但怎么就显示包含1个元素呢??而a+2也应代表第2行的首地址,但是怎么仅包含1个元素???
printf("-------------------------------------------\n");
printf("a[1][0]=%d,*(*(a+1)+0)=%d\n",a[1][0],*(*(a+1)+0));
printf("a[1][0] size=%d,*(*(a+1)+0) size=%d\n",sizeof(a[1][0]),sizeof(*(*(a+1)+0)));
printf("a[1][0]包含的元素个数是:%d,*(*(a+1)+0))包含元素个数是:%d\n",sizeof(a[1][0])/n,sizeof(*(*(a+1)+0))/n);
printf("-------------------------------------------\n");
system("PAUSE");
return 0;
}
阅读(1109) | 评论(0) | 转发(0) |