码迷,mamicode.com
首页 > 其他好文 > 详细

C(5)

时间:2015-08-06 13:25:08      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

指针

本节引言:

上一节我们对C语言复合数据类型中的数组进行了解析,在本节中,我们会对C语言复合数据类型中的

重点,C语言的灵魂-----指针进行学习!使用指针的好处:利用指针可以表示与使用复杂的数据结构;

更加方便地使用我们的数组与字符串;可以像汇编语言一样直接处理内存单元地址;可以动态地进行内存空间

分配,C语言指针是重点,同时也是C中的难点,就让大家跟随笔者的脚步,对C中的指针进行剖析把!


本节学习路线图:


技术分享



指针概念,指针与一维数组与字符串:


技术分享


指针与二维数组:


该知识点是指针的难点,其实要弄懂这里的话,我们只要把重心放到二维数组上,对二维数组进行彻底的理解!

step 1:二维数组是按行与列存储数据的;我们可以看成若干行 + 每行若干列的一维数组组成

int a[3][4] ={{1,2,3,4},{1,2,3,4},{1,2,3,4}};   可以看成三行,每行有四个一维数组


step 2:a代表二维数组首元素的地址,即&a[0],如果换行数组的第二,三行的话,只需要:a + 1,a+2这样;等于&a[1],&a[2]


step 3:我们可以把a[0]看做是指向a[0][0]的指针,那么a[0]+1则指向a[0][1],即此时的地址为&a[0][1]

ps: 这里的+1的1是数组元素所占的字节数,比如int a[]的话,那么这个+1代表的就是向后移动4个字节,指向的就是下一元素;

如果是+2的话就是后移8个字节,所以a[i][2] = a[i] + 2



step 4:通过前面一维数组的学习,我们可以知道 a[i] 与 *(a+i)等价

同样的,我们扩展到二维数组的情况  a[i][j] 与*(a+i)+j 和a[i]+j是等价的,都是表示a[i][j]的地址

而求a[i][j]的值:  *(a[i]+j)  与*(*(a+i)+j)都是可以的


注意:*a 与*(a+i)都不代表任何具体的数组元素,所以当你们引用他们的时候可能会引起错误哦!


①数组首地址a[0]: a   不可以直接引用!!!

②一维数组a[0]首元的地址(&a[0][0]):   a[0],*(a+0),*a;

③第一行的首地址: a + 1   同样不可以直接应用

④一维数组a[1]首元的地址(&a[1][1]):    a[1],*(a + 1)

⑤序号为2行4列元素a[2][4]的地址:a[2]+4,*(a+2)+4,a[2][4]


代码示例:

①指向数组元素:                                                            

    运行截图:

技术分享        技术分享


②指向数组

运行截图:

技术分享       技术分享



小结:

①指针的概念,指针变量,直接访问与间接访问

②指针的基本使用

③指针与一维数组

④指针与字符串

⑤指针与二维数组


本文借鉴:http://blog.csdn.net/coder_pig/article/details/37754625


版权声明:欢迎转载,希望在你转载的同时,添加原文地址,谢谢配合

C(5)

标签:

原文地址:http://blog.csdn.net/u011225629/article/details/47313527

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!