关于写程序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
奋斗吧....少年..