- //指针的特点
- //数组指针和指针数组
- /*
- 注意易错点:数组指针指向的是数组!所以移动的时候将该数组的总大小当做一个单位
- */
- #include <stdio.h>
- int main(){
-
- printf("------------数组指针理解-------本质是个指针,只不过指向的是数组--------------\n");
- int a[3]={0,1,2};
- int (*c)[3]=&a;//定义一个指向数组a的指针c,注意c是一个指针,是指向数组的!
- // int (*c)[3]=&a[0];//这样定义会有warning出现,而且与上一行打印结果相同
- printf("定义如下:\nint a[3]={0,1,2};\nint (*c)[3]=&a;\n(*c)和a是等价的,所以有以下结果:\n");
- printf("&(*c)[0]是%p\t&(*c)[1]是%p\t&(*c)[2]是%p\n",&(*c)[0],&(*c)[1],&(*c)[2]);
- printf("a[0]的地址是%p\ta[1]的地址是%p\ta[2]的地址是%p\n",&a[0],&a[1],&a[2]);
- printf("(*c)[0]是%d\t(*c)[1]是%d\t(*c)[2]是%d\n",(*c)[0],(*c)[1],(*c)[2]);
- printf("a[0]是%d\t\ta[1]是%d\t\ta[2]是%d\n",a[0],a[1],a[2]);
- printf("c是指向数组a的一个指针,所以c[0]中是数组a的地址,而c[1]是再加(sizeof(int)*3)个字节\n");
- printf("c[0]是%p\t\tc[1]是%p\tc[2]是%p\n",c[0],c[1],c[2]);
- printf("*c[0]是%d\t*c[1]是%d\t*c[2]是%d\n",*c[0],*c[1],*c[2]);
-
- printf("-----------指针数组理解--------本质是个数组,只不过存的是指针-----------------------\n");
-
- int b1=10;int b2=11;int b3=12;
- int *q[3]={&b1,&b2,&b3};
-
- printf("定义:\nint b1=10;int b2=11;int b3=12; \nint *q[3]={&b1,&b2,&b3};\n");
- printf("b1=%d\t\tb2=%d\t\tb3=%d\n",b1,b2,b3);
- printf("*q[0]是%d\t*q[1]是%d\t*q[2]是%d\n",*q[0],*q[1],*q[2]);
- printf("b1的地址是%p\tb2的地址是%p\tb3的地址是%p\n",&b1,&b2,&b3);
- printf("q[0]是%p\t\tq[1]是%p\t\tq[2]是%p\n",q[0],q[1],q[2]);
-
- return 0;
-
- }
复制代码 |
|