c语言指针:a为二维数组,那a[0]是什么类型?是指针还是数组?

在书上看到说这两段程序等价:inta[NUM_ROWS][NUM_COLS],(*P)[NUM_COLS],i;for(p=&a[0];p<&a[NUM_ROWS];p+... 在书上看到说这两段程序等价:
int a[NUM_ROWS][NUM_COLS], (*P)[NUM_COLS], i;
for (p = &a[0]; p<&a[NUM_ROWS]; p++)
(*p)[i]=0;

int a[NUM_ROWS][NUM_COLS], (*P)[NUM_COLS], i;
for (p = a; p<a+ NUM_COLS; p++)
(*p)[i]=0;
书上又说a是指向a的第0行的指针,类型是 int(*) [NUM_COLS], 而a[0]是指向第0行第0个元素的指针,类型为 int *
那在第一段程序里 &a[0]又是什么意思?a[0]已经是指针了,又对它取地址了那不就是指针的地址了,而不是数组的第0行的地址了吗?
求大神解释,谢谢!
展开
 我来答
丰又青6i
2015-07-08 · TA获得超过153个赞
知道小有建树答主
回答量:91
采纳率:50%
帮助的人:59.8万
展开全部

二维数组a中,a[0][0]是第一行的第一个元素,

a[0]则是指向第一行第一个元素的指针即a[0] = &a[0][0];  

a是数组名,也是指向第一行的第一个元素的指针所以a = &a[0][0];

至于 a = &a[0] ,因为a[0]并不是从 其他地方 弄了个空间保存&a[0][0]; 它就在这个数组的空间里,楼主看一下数组在内存中怎样保存估计就明白了

最后附上个小程序希望有用

#include <iostream>
using namespace std;
int main()
{
    int a[2][2]={
                1,2,
                3,4
            };
    cout<<"a:      "<<a<<endl;
    cout<<"&a[0]:  "<<&a[0]<<endl;
    cout<<"a[0]    "<<a[0]<<endl;
    cout<<"a[0][0] "<<a[0][0]<<endl;
    cout<<"&a[0][0]"<<&a[0][0]<<endl;
    return 0;
}

如果我的回答不好请见谅,我的表达能力不是 很好

kingdjh
2015-07-08 · TA获得超过955个赞
知道小有建树答主
回答量:939
采纳率:66%
帮助的人:836万
展开全部
a[0]固然是个指针,可以它是个二重指针啊,所以还有个指针存放这个指针地址
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
haiyangfenghuo
2015-07-08 · TA获得超过2439个赞
知道大有可为答主
回答量:2388
采纳率:0%
帮助的人:805万
展开全部
a代表数组的地址,也是数组第0行元素的地址,是同一个值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
不是知道很多
2018-03-24
知道答主
回答量:20
采纳率:0%
帮助的人:10.8万
展开全部
a[0]是指针,类型是int*。

a[0]是a[0][10]的首地址,a[0]=&a[0][0],a[0]每加1移动一个int,a[0]+1=&a[0][1]

a可以看作a[3]的首地址,a=&a[0],a每加1移动10个int,a+1=&a[1],a的类型是int(*p)[10],a是一个指针,指向含有10个元素的数组
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式