Chinaunix首页 | 论坛 | 博客
  • 博客访问: 124580
  • 博文数量: 52
  • 博客积分: 2200
  • 博客等级: 大尉
  • 技术积分: 580
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-08 15:00
文章分类

全部博文(52)

文章存档

2011年(1)

2009年(51)

我的朋友

分类: C/C++

2009-10-08 16:24:38

/*=============================================================
                认识二维数组中的行列指针差异,明白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) |
给主人留下些什么吧!~~