
关于C语言中“二维数组和数组元素的地址”的为问题。
先给出以下定义:int*p,a[3],[4];则赋值语句p=a;是合法的语句吗?为什么?备注:二维数组名应该理解为一个行指针。二维数组名同样是一个存放地址常量的指针,其值...
先给出以下定义:
int *p,a[3],[4];
则赋值语句 p=a;是合法的语句吗?为什么?
备注:二维数组名应该理解为一个行指针。二维数组名同样是一个存放地址常量的指针,其值为二维数组中第一个元素的地址。 展开
int *p,a[3],[4];
则赋值语句 p=a;是合法的语句吗?为什么?
备注:二维数组名应该理解为一个行指针。二维数组名同样是一个存放地址常量的指针,其值为二维数组中第一个元素的地址。 展开
4个回答
展开全部
呵呵,首先你的二维数组写错了。这个赋值语句是不合法的,因为指针p是指向一个int值的,而a是指向一个int指针的指针,它俩的类型都不同。。所以这个语句是不合法的。。
追问
a[0] a[0][0] a[0][1] a[0][2] a[0][3]
a[1] a[1][0] a[1][1] a[1][2] a[1][3]
a[2] a[2][0] a[2][1] a[2][2] a[2][3]
则a[0]的地址就是a[0][0]的地址,a[0]是“存在”的且是“指针”且a[0]自己的地址“并不是”a[0][0]的地址,a,a[0]与a[0][0]是占用着3个不同地址的存储单元且a[0]内部装着的是a[0][0]的地址。
a的值与a[0]相同,只是a包含a[0],a[1],a[2]。而a[0]包含a[0][0] ~ a[0][3],这样理解对么?
追答
你说的很复杂。。,a就是a[0]的地址,a[0]就是a[0][0]的地址。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数组名可以认为是个指针常量。
int *p,a[3][4];
你不可以 p = a; 因为a是二维数组。
但是你可以 p = (int*)a; 或者 p = a[0];或者 p = *a;
int *p,a[3][4];
你不可以 p = a; 因为a是二维数组。
但是你可以 p = (int*)a; 或者 p = a[0];或者 p = *a;
更多追问追答
追问
为什么呢?
1.“你不可以 p = a; 因为a是二维数组。”二维数组怎么了?这是为什么呢?
2.“但是你可以 p = (int*)a;”为什么呢?这个 p = (int*)a;的含义是什么?
3.“ p = *a; ”这里的这个是什么含义?为什么?
追答
a 类型是 int *const [4], 相当于 int **, 显然你不能吧int ** 直接赋值给int*;
因为a是个地址,指向数组开始地址,p = (int*)a;意义就是把数组开始地址给p
p=*a; 则是把数组第一行地址给p,实际上就是把数组开始地址给p;
指针或者数组的 *a就是等同于a[0]
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p是一维指针, (int*)a是强制转换,转换二维指针得到一个一维指针给p当然可以。
p=*a,*a是一维指针,所以一维指针给一维指针赋值当然可以
p=*a,*a是一维指针,所以一维指针给一维指针赋值当然可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询