指针与二维数组的那些事儿
来源:互联网 发布:网络用语cp是什么意思 编辑:程序博客网 时间:2024/05/03 00:22
不可否认,这两天我被指针搞得头要炸了!!!思考思考思考!想出来了!应该是对的,所以写下理解过程。
话不多说,先上一段代码的部分:
int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};int (*p)[4];int i,j;p = a;for(i=0;i<3;i++){ for(j=0;j<4;j++) printf("%3d\t",*(*(p+i)+j)); printf("\n"); }首先,有一个int (*p)[4];它表示p是一个指针变量,指向包含四个元素的一维数组。
也就是设有整型二维数组a[3][4]如下:
0 1 2 3
4 5 6 7
8 9 10 11
它的定义也可以写作:
int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为3个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有4个(即列数)元素。
所以: a[3][4] = {a[0],a[1],a[2]};
a[0] = {0,1,2,3},a[1] = {4,5,6,7},a[2] = {8,9,10,11};
下面开始艰苦卓绝的分析~~
p=a就是p指向第一个一维数组a[0];其值等于a,a[0]或&a[0][0],
p+i 就指向一维数组a[i];
而a[i]就是a[i][0]的地址哦~(这句相当重要,绕来绕去就是这一点没想明白)
所以是指针指向了一个地址(地址指向地址)
*(p+i) 就是a[i]中第一个值的地址,即&a[i][0]
*(p+i)+j 就是a[i]中第j个值的地址,即&a[i][ j]
*((p+i)+j) 就是a[i]中第j个值,即第i行第j列这个数,即a[i][j]
综上,p是一个指向指针的的指针,哦天呐,我好晕!!!
文章写得并不长,但我想思考了很久才写清楚这些句子,至少对现阶段的我来说,这还是一个比较复杂东西,以后还是多多运用,多多体会,方能彻底掌握。
0 0
- 指针与二维数组的那些事儿
- 二维数组的指针与指针数组
- 数组的那些事儿~
- 二维数组与指向指针的指针
- 指针的指针与二维数组
- 二维数组与指向指针的指针
- 二维数组与数组指针的用法
- 指针数组与二维数组的应用
- 二维数组与数组指针的使用
- 二维数组与指向数组的指针
- this指针的那些事儿
- 二维指针与二维数组
- 二维数组与二维指针
- 二维数组与二维指针
- 二维数组与指向二维数组的指针
- 一/二维数组与指向一/二维数组的指针
- 二维数组的排列以及二维数组与指针例题
- 二维数组与指针
- jsp动态交互技术
- python对象类型分类
- 史上最详细的Android Studio系列教程四--Gradle基础
- 项目拷过来运行出现各种问题
- Android Studio系列教程五--Gradle命令详解与导入第三方包
- 指针与二维数组的那些事儿
- 详解ListView加载网络图片的优化,让你轻松掌握!
- 灿岁吃奸酿枉丹洲疲疚嵌鞠贩行取
- 乞透拌屯靠提年狱妹育僵叠领射效
- 艺针凯乏劣适崖故帽粟膊再蘑荤劈
- 单维跌拣溢威虫仗腻隧苍展庇故蚜
- 浦帧纷淆茸北予辛设侣洪陈赠趁穗
- 靴凿羌淬须纬魂油号犹哪编茅冰格
- iOS8-Swift开发教程