关于写程序c语法的一些心得1.1

本文章记录本人在写c指针关于语法的小心得

1 对指针的看法要注意两点

 

 1.1 指针指向哪一个地方

 1.2 指针指向那个地方的类型(同时需要注意的是:指针的作用范围)

=============================================

       一维数组


1 int a[3];
2 int *p1 = a;
3 int *p2 = &a[0];
4 int *p3 = &a;

p1指向a数组的首地址也是第一个元素的地址,其指向的类型是int  作用目标是int 4个字节(32位操作系统)

p2和p1等价

p3指向a数组的首地址也是第一个元素的地址,其指向的类型是int [3]  作用目标是int  [3]   3*4个字节(32位操作系统)


 

==============================================================

    二维数组


1     int a[2][3] = {{1,2,3},{4,5}};
2     int (*p1)[3];
3     int *p2;
4 
5     p1 = a;
6     p2 = &a[0][0];
7     
8     printf("%d\n", **(p1+1));
9     printf("%d\n", *(p2+1));

 p1 是一个指向int   * [3] 这种类型的指针, 将p1赋值为二维数组的首地址也是第一个元素的首地址  其目标为 int [3]   3*4个字节

  PS:    p1 是一个数组指针(指向数组的指针)-------------

----------------------------------------拓展: int   *p1[3];          由于中括号的优先级比较高, 所以p1是一个指针数组(存放了很多指针的数组)

   所以: 第八行打印结果是 4

 


 p2 是一个指向int   这种类型的指针, 将p2赋值为二维数组 首元素的地址  其目标为int 4个字节

   所以: 第九行打印结果是 2

 

posted @ 2017-02-27 14:57  得了白学症  阅读(199)  评论(0编辑  收藏  举报