A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 于鸿鹏 于 2015-11-4 09:13 编辑

复习C语言的,觉得对指针数组和二维数组指针理解的还是不够透彻,个人目前的理解如下:
1、例如 定义一个:int *p[3] = { &a,&b,&c }; 它 是一个指针数组,用来存放指针,本质是数组,只不过数组的每个元素是指针变量
2、int (*p)[3] = a;  是二维数组指针,指向二维数组的首地址,本质是指针,指向的是一个二维数组,可以看做是指向了含有3个元素的一维数组
3、两者都可以用来表示二维数组
4、二维数组指针变量是单个的变量,只能存放一个二维数组的地址
5、指针数组是多个有序指针

个人理解可能会有不适当的地方,还能不能描述的再露骨一点,求大神指点!! !

10 个回复

倒序浏览
来看看你的理解
回复 使用道具 举报
c9527 发表于 2015-11-4 09:36
来看看你的理解

恩 ,不知道自己理解的对不对
回复 使用道具 举报
1.行指针与列指针区别是否是+1上的不同,例如a[0]+1是指a[0][1]的地址  而&a[0]+1是指a[1][0]的地址!除了上面还有其他的行指针与列指针表示方法吗?只要有其功能就可!   ——本质上不存在任何区别,n维数组的存储空间都是连续的,只不静态声明数组时,编译器帮你生成了根据下表访问特定元素的代码,如a[3][3],使用a[1][2]则编译器帮你生成*(a+(3*1)+2)的指针访问代码,所以对于二维数组,设n,m分别为其一、二维,行指针:a+(n*行数),列指针:a+列数,在该位置的元素:a+(n*行数)+列数,不过用这种思维来理解数组欠妥,特别是维数多的时候。  2.**a,*a[0]是否别代表a[0][0]这个元素,是否就代表a可以当作指针,还是有其他的  区别!能讲一点也好?   ——不代表,a本身就是指针,而且是个值不能改变的指针,除非数组的元素是指针或多阶指针  3.正如上面所说,a,a[0],&a[0][0]是指同一个地址,除了上述+1区别,还有么?(可以从用法或其他方面说)   ——转变思维方法,数组是线性存储,就线性地去理解它
回复 使用道具 举报
谁在放荡 来自手机 中级黑马 2015-11-4 11:12:29
报纸
就是这把,二维数组指针p指的是行地址,,就是楼主意思
回复 使用道具 举报
二维数组:如char string_1[10][10]只要定义了一个二维数组,无论赋不赋值,系统都会给他分配相应空间,而且该空间一定是连续的。其每个元素表示一个字符。我们可以通过指定下标对其元素进行修改。
指针数组:如char *str_B[5] 系统至少会分配5个连续的空间用来存储5个元素,表示str_B是一个5个元素的数组,每个元素是一个指向字符型数据的一个指针。
如果我做这样的定义:
char a[3][8]={"gain","much","strong"};
char *n[3]={"gain","much","strong"};
他们在内存的存储方式分别如右图所示,可见,系统给数组a分配了
3×8的空间,而给n分配的空间则取决于具体字符串的长度。
此外,系统分配给a的空间是连续的,而给n分配的空间则不一定连续。
由此可见,相比于比二维字符数组,指针数组有明显的优点:一是指针数组中每个元素所指的字符串不必限制在相同的字符长度;二是访问指针数组中的一个元素是用指针间接进行的,效率比下标方式要高。 但是二维字符数组却可以通过下标很方便的修改某一元素的值,而指针数组却无法这么做。
————————————百度百科  指针数组
回复 使用道具 举报
c9527 发表于 2015-11-4 11:54
二维数组:如char string_1[10][10]只要定义了一个二维数组,无论赋不赋值,系统都会给他分配相应空间,而且 ...

学习了  谢谢
回复 使用道具 举报
fenxite 发表于 2015-11-4 11:01
1.行指针与列指针区别是否是+1上的不同,例如a[0]+1是指a[0][1]的地址  而&a[0]+1是指a[1][0]的地址!除了 ...

看的有点凌乱啊  一问一答的
回复 使用道具 举报
谁在放荡 发表于 2015-11-4 11:12
就是这把,二维数组指针p指的是行地址,,就是楼主意思

恩 可以一起共同讨论
回复 使用道具 举报
感觉你理解的已经比较透彻了
回复 使用道具 举报
许本亮 发表于 2015-11-4 16:26
感觉你理解的已经比较透彻了

谢谢  这个理解是一回事情,用起来有事另一回事,所有想看看大家有其他更容易让人理解的说法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马