C语言关于指针和二维数组的问题。。

准备将a[m][n]赋给指针时。。定义指针时*p*p[N](*p)[N]这有什么区别?p+1.对于这3种情况意义是一样的吗?... 准备将a[m][n]赋给指针时。。定义指针时*p *p[N] (*p)[N]这有什么区别?
p+1.对于这3种情况意义是一样的吗?
展开
 我来答
飞叶舞空
2012-07-17 · TA获得超过164个赞
知道答主
回答量:64
采纳率:0%
帮助的人:67.1万
展开全部
*p 是指针
*p[N]是指针数组,你可以看成一个数组里存放的都是指针,它本质上就是一个数组,
(*p)[N]是数组指针,也就是指向数组的指针,本质是一个指针,指向的是数组
将a[m][n]赋值付给p都是一样的,都是把a数组的首行地址赋给p
但是p+1的情况,三个是不一样的
你没声明类型,我这里暂且认为是int a[m][n],*p *p[N],(*p)[N],类型在这里决定了p+1的大小,不定义不行啊:
第一种,p+1是指针向高地址移动一个sizeof(int)型大小的位置,
第二种,p+1是指针向高地址移动了一个sizeof(int)大小的位置,
第三中,p+1是指针向高地址移动了一个sizeof(int)*N大小的位置,
也就是第三种情况和其他的有区别
先不要纠结这个问题了,理解这些还需要深一些的功底,要纠结的话再去把《C和指针》《C深度解剖》看一遍,看完的话基本就理解了
追问
sizeof(int)*N这个应该是小n吧?确实准备去看那两本书了
追答
这个N就是(*p)[N]里的N,你定义的时候N是多少就是多少,它指定了数组指针指向的数组的大小,p+1的大小实际上就是移动了一个这样的数组的的大小。 另外,*p[N]之所以和(*p)[N]不一样,是因为,[]运算符的优先级要比*高些,他会先和p结合,所以*p[N]是数组。加上括号的(*p)[N],因为*p在()里面,它们先结合,所以,(*p)[N]本质上是指针
yu51hang
2012-07-07 · 超过14用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:28.8万
展开全部
第一个*p,指向a[m][n]时,p指向a[0][0],p+1是指向a[1][0];
第二个*p[N],这是一个指针书组,很少有人这么用,也看你怎么把a地址赋值,p[0]是指向一个字符串,p[0]是指向下一个字符串就是a[1],p+1会被默认为p[0]+1,指向a[0][1];
第三个(*p)[N],首先问下,这是定义指针?要是C++里我还能认为是给指针分配空间,不过,分配空间也完全。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f4d8061e1
2012-07-07
知道答主
回答量:8
采纳率:0%
帮助的人:4.1万
展开全部
*p 指针
(*p)[N]数组指针,执行p+1时,p要跨过n个整型数据的长度
*p[N] 指针数组 执行p+1是错误的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
快乐的飞翔企鹅
2012-07-08
知道答主
回答量:50
采纳率:0%
帮助的人:23.6万
展开全部
我有课件,但是怎么给你啊
追问
610454434@qq.com
追答
我已经给你发过去了,注意查收
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-07-15
展开全部
问题提的不清楚!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式