⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_37622.htm

📁 vc
💻 HTM
字号:
<p>
序号:37622 发表者:晚风也渡 发表日期:2003-04-26 15:30:22
<br>主题:请指教!(关于new)
<br>内容:看到MSDN上有这样一个例子,用来给多维数组动态分配内存空间<BR>float (*cp)[25][10];<BR>cp = new float[10][25][10];<BR>不是很理解,请高手讲解一下!多谢!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:dr0 回复日期:2003-04-26 16:14:48
<br>内容:主要就是降维数.<BR><BR>1,float (*cp)[25][10] , 定义一个指针cp, 这个指针指向一个2维数组,形如 25 x 10 的数组<BR>2,cp = new float[10][25][10] , 在CRT堆上定义/申请一个10个元素的数组,其中<BR>每个元素都是上面1中形式的数组<BR><BR>其实,这个例子不好,float[10][25][10] 比较迷惑人,改成 float[15][25][10]<BR>只要第一维不是10都比原来的清楚。<BR><BR>建议看看 *expert c programming*, xiongli给了个link, 你可以下载.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:晚风也渡 回复日期:2003-04-26 16:29:53
<br>内容:谢谢dr0,我在下载!<BR>看完MSDN我就更糊涂了,呵呵!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-26 16:31:36
<br>内容:MSDN也有很多问题,但是总不失为编程圣经
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-26 16:39:44
<br>内容:其实,c 里面没有多维数组这个概念,内存就是个线性的序列,所谓<BR>[X][Y][Z] 就是一个 X * Y * Z 的线段,先分成X段,设每个段是Xi,则Xi再分成Y段<BR>设每个段为XiYj, 则再分成Z段,则每个段为XiYjZk. 这样XiYjZk就是任意个最小的<BR>分配单元。上面的例子是XiYjZk是float. XiYj都是地址,只有第三维才是真正的数组元素<BR>前面的维数都是用来划分地址的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:晚风也渡 回复日期:2003-04-26 16:54:10
<br>内容:int m,n;<BR>cin&gt;m&gt;n;<BR>float (*cp)[m][n];<BR>cp = new float[10][m][n];<BR>这样为什么不行?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-26 17:08:32
<br>内容:数组的第一维可以是变动的,动态的,后面的必须要固定。<BR>比如, new float [x] 是对的,因为要申请x个float.<BR>new float[x][10]也是对的,要申请x个 float[10].<BR>new float[x][y][10]是不行的,因为y是变得。<BR>new float[x][15][10]是可以的,申请x个[15][10]<BR>从降维的角度来讲,任意多维数组都可以转化成两维数组 [m][n]<BR>n必须是const, m可以是variable.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-26 17:24:31
<br>内容:理论上,[x][y][z] 是可以计算的,但是,当你把数组指针传给一个函数时<BR>很容易越界访问。i guess. 其实,只要你想做到这样的效果,总是可以办到<BR>的,但是很不幸,现在的ANSI C不支持。<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// e.g. access a [m][n] array ...<BR>&nbsp;&nbsp;&nbsp;&nbsp;// first allocate a 4 * m * n bytes<BR>&nbsp;&nbsp;&nbsp;&nbsp;int *p = (int *) malloc(m * n * 4); <BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// access [m - 1][n - 1]<BR>&nbsp;&nbsp;&nbsp;&nbsp;*(p + (m - 1) * n + (n - 1))&nbsp;&nbsp;= 0;
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-26 17:25:15
<br>内容:用指针可以做到。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-26 17:35:05
<br>内容:对c来说,只有指针概念是核心,没有约束,数组是架构在指针之上而形成的概念<BR>自由度就要差了。All is pointer, Pointer is all :D<BR>对c++来说,根本不提倡用array, 用vector,list等等collection才是<BR>正宗的c++用法。这也是c++立足点和想法上的不同。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:晚风也渡 回复日期:2003-04-26 18:55:50
<br>内容:dr0,非常感谢你,你让我知道了很多,我想,我有必要看你推荐的那本书了,呵呵!有问题会再麻烦你的.....
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-26 19:12:47
<br>内容:my pleasure .
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -