一级指针还有二级指针还有指向行数组的指针之间的区别,,具体举个例子解释下吧

 我来答
郑阔1025
推荐于2016-01-11 · TA获得超过177个赞
知道答主
回答量:39
采纳率:0%
帮助的人:30.5万
展开全部
我这里用int类型的指针为例:
int *p; p=new int; 或是p=new int[5];通过一个指针可以创建一个实体或多个实体,并通过*p或者p[i]的形式来访问实体空间,也就是通过一个指针可以创建一行或是一列实体,也就是可以创建一个数组。
现在试想:我想创建一个5*4的矩阵,我用指针创建数组怎么做?
首先,每一行的创建需要一个int类型的指针,我现在要创建五行,所以我需要5个int 类型的指针。而5 个int类型的指针又可以组建一个数组实体个数是5,只不过这时实体变成了int*, 而先前创建的实体是int 数据。
这个指针数组的创建就需要到二级指针也就是指向指针的指针:int **q; q=new int*[5];
q[0]=new int[4];完成了一行的创建,之后的各行类似,我不知道你说的指向行数组的指针是不是和这里的q[0]类似?如果是的话那么我觉得二级指针可以用来构建一个行数组指针。

我写的不清楚的话,再来联系我讨论好了。
学习需要坚持加油啊!
来自异世界的韩梅梅
2011-10-21 · TA获得超过499个赞
知道小有建树答主
回答量:509
采纳率:100%
帮助的人:433万
展开全部
C菜鸟助手成员tonytvb为你解答(如有疑问请hi我或向我的团队提问):

你大概是对指针不是很了解吧!
这样得先让你对指针了解才行。
1、指针指向的是地址
我们知道内存存放数据是通过地址来访问的
而指针就行相当于负责指向这个地址的作用
如int a=10,系统会分配一个地址例如为1000
那么我再定义一个int *p=&a;意思就是指向这个1000的地址
但是如果我在这个基础上又想访问1000这个地址呢?
其实1000你换个角度来想,这个地址其实也可以看作是一个数据
那么1000这个地址可不可以又有一个地址指向它呢?
答案是可以的,这就出现了所谓的二级指针了
int **q=&p;意思就是指向这个1000的地址,假如地址为2000
按这样下去是相当于可以生成无限的级别的指针的!
所以理解了就可以了。

而你所说的指向数组的指针就是相当于二级指针
意思一样的,不懂再问!

如有更多的疑问请hi我
在这里给自己新创建的团队“C菜鸟助手”打个小广告,
各位如果有C/C++方面不懂的可以一起讨论!
不为分数,只为解决问题!
谢谢,祝各位生活愉快!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户65074
2011-10-22 · TA获得超过459个赞
知道答主
回答量:172
采纳率:0%
帮助的人:119万
展开全部
回楼主的补充问题:

(*p)[4]只能指向一个有4个元素的数组的开头,而如果指向5个元素的数组或者指向其它类型就不行,后面加个[4]是为了方便用i*m j公式计算地址用的.

(*p)[4]指向第一维有四个元素的二维数组,方便今后用p[i][j]的方式调用,但是如果指向了其他东西,C语言也是允许的,只不过用到p[i][j]是仍旧当他那样是第一维有四个元素的二维数组处理。

看了上述解释以后一头雾水也没关系,实际上C语言的指针是相当灵活的,它不检查指针的操作,所以他功能强大,也很危险。例如:

char a[8]={0,1,2,3,4,5,6,7};
int (*p)[4]=a;
printf("%d",p[0][2]); /* 1284 (等于5*256 4,即二进制00000101 00000100) */
printf("%d",p[1][3]); /*超过a范围,结果随机*/
printf("%d",p[-1][4]);/*256 相当于p[0][0]*/

上面这段东西我在tc里面试验,第二行有警告,编译仍然通过。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式