有关二维数组和指针数组问题??

Tank_Net 2006-10-20 10:03:28
假如有一个二维数组

a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
//问题1 这里可以理解成有3个元素的数组 每个元素又是有4个int类型元素数组组成的吧?
//那么a[0]是不是应该 是一个有4个元素数组的首地址? 这么理解对不对


还有 一个指针数组

int (*q)[4];//问题2 q是一个指向有4个int型元素数组的指针吧 对不对??


如果上面的问题对

那么 q=a[0]


为什么是不合法的?

忘高手能详细回答 问题1 问题2 及相关自己的理解??

谢谢了!


...全文
877 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhu_doc 2006-10-20
  • 打赏
  • 举报
回复
现留名
lw1a2 2006-10-20
  • 打赏
  • 举报
回复
q=&a[0];
mu_yang 2006-10-20
  • 打赏
  • 举报
回复
q=a[0]是不合法的
----------------------
也不好说是不合法的
在c里是合法的(c++里不合法)
但通常属于概念有问题
类似于
int i;double *p;
p=&i;
linjixin123 2006-10-20
  • 打赏
  • 举报
回复
需要弄清楚数组名字代表的意思,在一维数组中数组名字代表指向某种数据类型的指针
在多维数组中,数组名字是指向数组的指针.
指向数组的指针和普通指针是不一样的...
所以不能赋值....
Tank_Net 2006-10-20
  • 打赏
  • 举报
回复
对于楼主上面的描述,可以这么说
a与a[0]的值实际上是相等的,可是意思不同
对于a来说,作为右值,a实际上是指向含有4个元素的数组的指针,即数组指针.
对于a[0]来说,作为右值,a[0]实际上是指向a[0][0]这个值的指针,即元素指针.
对于q来说,它是指向一个含有4个元素的数组的指针.
由此可见,q=a是合法的,而q=a[0]是不合法的
=================================================================
linjixin123(孤晕) 这里讲的我有点入门, 谢谢了


lj860603(键键) 的耐心解答 我也谢谢了! 肯定会加分的!
Tank_Net 2006-10-20
  • 打赏
  • 举报
回复
那我就有点迷惑了


那我定义 int(*p)[5];
int m[5];//含有5个元素的数组

为什么 不能 p=m; 麻烦您在讲一讲 难到还是同维数有关吗?
linjixin123 2006-10-20
  • 打赏
  • 举报
回复
lj860603(键键)的回答不合楼主要求啊,而且写的是一维的哦
lj860603 2006-10-20
  • 打赏
  • 举报
回复
那如果定义一个指向一个只含5个元素(仅含5个)数组的指针p
=============
这不是更简单吗?

int *p;
int a[5];
p = a;
Golfen 2006-10-20
  • 打赏
  • 举报
回复
其实lz可以用:
p=&a[0],就对了
linjixin123 2006-10-20
  • 打赏
  • 举报
回复
需要纠正楼主的题目
int (*q)[4];
这个不是指针数组,而是数组指针,是一个指向包含4个元素的数组的指针
int *q[4];
这个才是指针数组
linjixin123 2006-10-20
  • 打赏
  • 举报
回复
int (*p)[5]
linjixin123 2006-10-20
  • 打赏
  • 举报
回复
简单的说 a可以看成是一个一维数组,包含3个元素,只是每个元素是包含4个元素的数组.
a这个名字是指向它的第一个元素的指针.所以a是一个指向一个包含4个元素数组的指针.
Tank_Net 2006-10-20
  • 打赏
  • 举报
回复
最后一个问题 答完 马上揭帖

那如果定义一个指向一个只含5个元素(仅含5个)数组的指针p

那么 如何定义???
linjixin123 2006-10-20
  • 打赏
  • 举报
回复
对于楼主上面的描述,可以这么说
a与a[0]的值实际上是相等的,可是意思不同
对于a来说,作为右值,a实际上是指向含有4个元素的数组的指针,即数组指针.
对于a[0]来说,作为右值,a[0]实际上是指向a[0][0]这个值的指针,即元素指针.
对于q来说,它是指向一个含有4个元素的数组的指针.
由此可见,q=a是合法的,而q=a[0]是不合法的
so_and_so 2006-10-20
  • 打赏
  • 举报
回复
int (*p)[4]
------------
指针数组????
lj860603 2006-10-20
  • 打赏
  • 举报
回复
代表p是一个指向2位数组的指针吗 ?
------------------
对的

那里面的4 如何解释呀? 代表什么?
===============
第二维长度

可以结贴~~
Tank_Net 2006-10-20
  • 打赏
  • 举报
回复
奥 那是我对这个问题理解有误呀!

那 int (*p)[4]
代表p是一个指向2位数组的指针吗 ?那里面的4 如何解释呀? 代表什么?
zary_linux 2006-10-20
  • 打赏
  • 举报
回复
纠正错误:int (*q)[4]是数组指针。
q = a 就对了
还没被加过分呢。-_-
lj860603 2006-10-20
  • 打赏
  • 举报
回复

q表示 应该 指向类似 int m[4] 有4个元素的数组呀 ?
===============
NO.
int (*)[4] :可以看做是个二维数组,这里的(*)也代表了一维,后面[4]又是一维。
Tank_Net 2006-10-20
  • 打赏
  • 举报
回复
还有
int (*q)[4];//问题2 q是一个指向有4个int型元素数组的指针吧 对不对??
==========================
可以这么理解。只是这里p 指向的数组是: int (*)[4]
=========
这里q指向的数组是int (*)[4] 这个int (*)[4]是什么样的数组?

q表示 应该 指向类似 int m[4] 有4个元素的数组呀 ?

加载更多回复(7)

69,387

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧