黑马程序员技术交流社区
标题:
数组指针和指针数组
[打印本页]
作者:
i_iOS
时间:
2015-10-1 23:08
标题:
数组指针和指针数组
//指针的特点
//数组指针和指针数组
/*
注意易错点:数组指针指向的是数组!所以移动的时候将该数组的总大小当做一个单位
*/
#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;
}
复制代码
作者:
8430110
时间:
2015-10-2 16:15
不错,学习来!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2