c语言二维数组问题

inta[2][2]={1,2,3,4},**p;p=a;这样为啥不行?... int a[2][2]={1,2,3,4},**p;
p=a;
这样为啥不行?
展开
 我来答
qfbzh
推荐于2020-12-18 · 超过11用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
今日在论坛上看到有人问到指针的问题,我想通过这样的例子来阐述几个常见的错误,并加深对二
级指针和二维数组之间关系的理解.
我们知道char array[]=”abcdef”; array是数组的首地址,
那么在二维数组中array当然也是数组的首地址,
看看这个定义char Array[][3] ={“ab“,“cd“,“ef“};
怎么知道的呢?定义这样一个数组,在vc调试窗口中
我们看到:
Array ---------0x64324234
|------Array[0]---0x64324234 “ab“
|------Array[1]---0x64324337 “cd“
|------Array[2]---0x6432433A “ef”
已经很明白了,实际编译器是这样实现二维数组的,实际上Array是“一维指针数组“的首地址,其中每一个元素指针都
对应一个字符串,那么好我们来看看是否可以这样来使用Array二维数组.
char **pArray = Array;编译器提示出错,怎么办呢?加个(char **)试试,仍然出错,设断看一下pArray的值和Array
的值是相等的,但我们是否可以象使用Array[i]那样来同样输出字符串呢?很明显是不行的,编译器不会把
pArray+i处理成pArray+i*3寻找到第i个指针的地址,而只是简单的加了一个i.这说明编译器只做了很简单的将地址值赋给
了pArray,而它实际没有任何意义.我们不能用它来访问任何数据.很奇怪吗?
再来看看这样定义char *p[] = {“ab“, “cd“, “ef“};定义了一个指针数组.char **sp = p;这样的用法经常看到,为什么这样
就可以使用sp[i]来访问字符串了呢,的确编译器在编译的时候识别出了sp是一个指向一维数组的指针的
指针,那么我们就可以把它做为数组名来操纵整个数组了,c神奇的地方或者说精华的地方就在这里了,希望
这篇文章对那些对指针或二级指针有疑惑的朋友能够有所帮助,这也是我blog里的第一篇文章,呵呵.

参考资料: http://www.zaoxue.com/article/tech-58535.htm

717370999
2008-11-24 · TA获得超过543个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:487万
展开全部
不能用一个二维指针指向这个二维数组的,你的二维指针是指向一个指向整型的指针,但是你的数组里面没有指向整型的指针,可以这么说,你理解二维数组的时候使用的二维指针的概念,虽然他们里面的存储的东西可能一样,是建立在我们的理解之上的,但是编译器不会想咱们这样理解,只是一个一维数组的抽象与延伸,所以这个转换也是不可以的,对编译器也是没有理由的~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
flycqc
2008-11-24 · 超过19用户采纳过TA的回答
知道答主
回答量:124
采纳率:0%
帮助的人:61.1万
展开全部
int *P P是一个指针 P=a a是数组的首地址
int **P =int *(*P) *P这里是个指针,p是个数
所以P=a就不行了三
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
要你三千
2008-11-24 · 超过14用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:22.3万
展开全部
此情况的指针可以定义为:int (*p)[2]
用法为:*(*(p+i)+j),表示访问第i行第j列的元素;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jdzfjfhnui
2008-11-24 · TA获得超过289个赞
知道小有建树答主
回答量:533
采纳率:0%
帮助的人:0
展开全部
p=&a
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式