下面程序中g[]和g[][]都可以使用,g到底是一维数组还是二维数组?

laomashitu 2011-08-19 06:44:43
double *ppTmp[8];
double (*g)[8] = new double[8][8];
……
for(i=0;i<nx;i++)
{
ppTmp[i]=g[i];
}
...全文
148 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
jernymy 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 whuqin 的回复:]
g是一维数组,里面的元素是double*,指向一块保存有doule元素的内存区。所以可以看成二维数组。
[/Quote]
++
Jade0709 2011-08-20
  • 打赏
  • 举报
回复
g是数组指针,数组指针应该与指针数组相区别。
double (*g)[8]:定义了一个指针,指向的单元为8个double型,所以g的步长为8*sizeof(double)
double *g[8]:定义了一个有8个元素的数组,数组的元素是指向double型数据的指针。

这样来看,问题中定义的g,用作g[i]时其本质是表示一个指向首地址为g+i*8*sizeof(double)长度为8*sizeof(double)的一片内存的指针,用作g[i][j]其本质是内存地址为g+(i*8+j)*sizeof(double)中的内容。
rein07 2011-08-20
  • 打赏
  • 举报
回复
其实只要知道指针及指向的内容就知道哪些是一维数组,哪些是多维数组
modicum_lf 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jernymy 的回复:]
引用 9 楼 whuqin 的回复:
g是一维数组,里面的元素是double*,指向一块保存有doule元素的内存区。所以可以看成二维数组。

++
[/Quote]
++
hackbuteer1 2011-08-20
  • 打赏
  • 举报
回复
g是一维数组,里面的每个元素都指向一个double * 元素的存储区,就是又指向一个含8个double的一维数组

,相当于二维数组
wizard_tiger 2011-08-20
  • 打赏
  • 举报
回复
9楼正解!
Jade0709 2011-08-20
  • 打赏
  • 举报
回复
指针和数组是不能混为一团的,虽然有的时候用起来形式是一样的。
Cql_liliang 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jxiaoshen 的回复:]
g是这样的一个数组:第i个元素对应于二维数组的第i行
[/Quote]

乱说,g不是一个数组, 而是一个指向数组的指针!!
g759281 2011-08-20
  • 打赏
  • 举报
回复
很好 谢谢
JiangXiang 2011-08-20
  • 打赏
  • 举报
回复
g到底是一维数组还是二维数组?

g是指针!
等待升级 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 laomashitu 的回复:]
double *ppTmp[8];
double (*g)[8] = new double[8][8];
[/Quote]
1.数组。元素为指针
2.指针。指向 含8个double的一维数组

++时 偏移不一样
1.偏移一个指针的长度(4字节)
2.偏移一个数组长度(即8*8)
vcf_reader 2011-08-19
  • 打赏
  • 举报
回复
不管几维,内存都按照一维处理
cao_julians 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 whuqin 的回复:]
g是一维数组,里面的元素是double*,指向一块保存有doule元素的内存区。所以可以看成二维数组。
[/Quote]
为什么有那么多人将g[]形式理解为数组呢?
g[i]只是*(g+i)的另一个指针表达形式而已!
春文秋武 2011-08-19
  • 打赏
  • 举报
回复
g是一维数组,里面的元素是double*,指向一块保存有doule元素的内存区。所以可以看成二维数组。
CJacky++ 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]
其实从根本上来讲,所有的多维数组都是一维数组。
[/Quote]
++++
春文秋武 2011-08-19
  • 打赏
  • 举报
回复
g是一维数组,里面的元素是double*,指向别的double元素。所以可以看成二维数组。
cao_julians 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jxiaoshen 的回复:]
g是这样的一个数组:第i个元素对应于二维数组的第i行
[/Quote]
概念错误,g是一指针变量,一个!
至善者善之敌 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pathuang68 的回复:]
其实从根本上来讲,所有的多维数组都是一维数组。
[/Quote]

++1,所以居士那天说的两种方法还是建议用第一种,哈哈
Jxiaoshen 2011-08-19
  • 打赏
  • 举报
回复
g是这样的一个数组:第i个元素对应于二维数组的第i行
cao_julians 2011-08-19
  • 打赏
  • 举报
回复
g即不是一维数组,也不是二维数组。它是指向8元素数组的指针。
g[0],g[1] 等指向了二维数组的第0行,第1行
g[0][0],g[1][0]等则是行中的元素。
=========================
仔细看看指针表达式部分的知识
加载更多回复(2)

69,337

社区成员

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

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