C语言二维数组问题

#include<stdio.h>#include<stdlib.h>voidp(int*q,intn){int*q_end;q_end=q+n-1;for(;q<=q_... #include<stdio.h>
#include<stdlib.h>
void p(int *q,int n)
{
int *q_end;
q_end=q+n-1;
for(;q<=q_end;q++)
printf("%2d",*q);
}

main()
{
int a[3][3]={
{1,2,3},
{4,5,6},
{7,8,9}
};
p(a,9);
}

编译时说 指针类型不符。
可是我是按照老谭的课本上来的阿。
课本上是一个求平均数的例子。
是在是想不通。

另外书上说:
对于二维数组a[2][2]来说 a就代表这这个数组的首地址,那么如下的代码怎么又不对了呢?

int a[2][2]={{1,2},{3,4}};
int *p;
p=a; //就这个怎么不对呢

难道非得定义为 int (*p)[2] 吗?
展开
 我来答
咕噜咕噜角角bD
2009-02-02 · 超过13用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:0
展开全部
程序将倒数第二行改为:p(*a,9);即可
另外,关于指针的说明:
0) 指针只能指向一维数组。
1) C/C++标准中并没有 array[m][n] 这样的表达//array为指针变量;
2) 不能用一维指针或二维指针直接指向二维数组。如果要让一维指针指向二维数组,则我们必需告诉指针所指向的数组的最后一维包含多少个元素,即告诉指针我们将传递一个二维数组的首地址给指针。如上面的例子,应该这样来定义指针:int (*p)[4];这样就可以用p=mat了;这是不是和我们上面说的"指针只能指向一维数组"相矛盾呢?不是的。其实指针指向的还是一维数组:这时我们是将每行当成一个元素!!指针即所谓的行指针。
3) 如果没有告诉指针所指向的数组是二维的(即定义行指针),显然指针不能接收二维数组名传来的地址,即p=mat的两边地址的类型不同,左边是一维的,右边是二维的。但是如果我们将二维数组看成是一维数组,那么这个一维数组的首地址是:mat[0],所以我们可以用p=mat[0];这样指针对二维数组的引用将完全按照一维数组的引用方式来调用。
百度网友6606ac94b
2009-02-02 · TA获得超过1151个赞
知道小有建树答主
回答量:1331
采纳率:0%
帮助的人:1290万
展开全部
虽然二维数组和一维数组的数组名都是指针,但他们之间不能相互赋值,二维数组的数组名是指向指针的指针,你可以把p函数的引用改为p(*a,9),先取a的第一行首地址.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yumenstar
2009-02-02 · TA获得超过946个赞
知道小有建树答主
回答量:538
采纳率:0%
帮助的人:408万
展开全部
你的第一个函数是正确的啊,我运行能通过的。

int a[2][2]={{1,2},{3,4}};
int *p;
p=a; 也是正确的,可能你的程序不正确是别的原因吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lilili606
2009-02-02 · TA获得超过468个赞
知道小有建树答主
回答量:225
采纳率:0%
帮助的人:263万
展开全部
二维数组的中A的地址是行指针的地址,而不是你所写的整形指针,,int (*p)[2]为指向一维数组的指针,可以匹配,用整形指针自然不能匹配, 建议你换本教材理解下,指针的东西确实很麻烦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友495dc91
2009-02-02 · TA获得超过106个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:138万
展开全部
int *p是整形指针,只能指向整形数,
a[2][2]={{1,2},{3,4}};a确实指向首地址,但首地址中的是数组{1,2};不是整形数所以a和p不是同一类型的数据,当然不能相等,你的程序就犯了这个毛病;你可以用一维数组代替二维数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
出来看上帝啊
2009-02-02 · 超过10用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:28.8万
展开全部
第1个函数有2个问题 一个你没有在主函数里进行函数说明,然后 你定义的函数里面的虚参是指针 而你调用函数的时候用的p(a,9)中的a是地址而不是指针
所以说指针类型不符 第2个函数是对的 至于你为什么会错可能是因为其他的原因 a的确代表a[2][2]的首地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式