📄 subject_55050.htm
字号:
<p>
序号:55050 发表者:小豌豆 发表日期:2003-10-06 01:35:48
<br>主题:请教关于数组和const的问题
<br>内容:定义数组时要求维数是一个constant<BR>但是我希望维数由用户指定,请问应该怎么办?<BR><BR>我本来是要这样做的<BR>int n;<BR>cin>>n;<BR>const int m=0;<BR>int* pc=&m;<BR>*pc=n;<BR>double a[m];<BR>这是根据《C++ Primer第三版[英文版]》page112页作的(<BR>const double minWage = 9.60;<BR>// ok? error?<BR>double *ptr = &minWage;<BR>Should this be allowed? minWage is a const object, so it is guaranteed not to be written over with a<BR>new value. ptr, however, is an ordinary pointer, and there is nothing to stop us from subsequently<BR>writing<BR>*ptr += 1.40; // modified minWage!)<BR><BR>可是我用的是vc编译器,不支持这样的语法:(
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:水番 回复日期:2003-10-06 18:55:12
<br>内容:首先你这样写是很不规范的。<BR>其次你这样做是不行的。<BR>你想想const的机制和数组的机制就明白了。
<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-10-07 09:43:20
<br>内容: 数组在定义的时候必须指定的他个数m,且m必须是编译时就要确定的,const int m = 0;表明了m是一个常数,他在编译时就确定,本身并不占内存。但是楼主用:<BR> int* pc=&m; // 强行给m分配内存,并用内存的地址初始化pc<BR>这样使得m并不是编译时确定,他要运行时才知道。<BR> 所以导致double a[m];出错。<BR> 如果希望维数由用户决定,那就用指针,更好的选择时用vector。<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>
回复者:coolleo 回复日期:2003-10-07 10:51:33
<br>内容:to:楼主<BR>const int m=0;<BR><BR>int* pc=&m; ----//pc是int *,而&m是const * ,so ,it's wrong。<BR><BR>还有c++primer的这个例子就是告诉你这种写法是错误的,再往下看点就有。<BR><BR>to水兄<BR>“数组在定义的时候必须指定的他个数m,且m必须是编译时就要确定的”,<BR>那么这样呢<BR>char [] c1="skjfidjfiejfh";//不指定也可以,但如果要指定就必须是编译常量。<BR><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>
回复者:水番 回复日期:2003-10-07 10:53:32
<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>
回复者:coolleo 回复日期:2003-10-07 12:43: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>
<font color=red>答案被接受</font><br>回复者:coolleo 回复日期:2003-10-08 09:23:33
<br>内容:还有,如果你希望维数由用户指定,除了用容器外,还可用new分配的动态数组,只不过不经常用.<BR>#include<iostream><BR>using namespace std;<BR><BR>void main()<BR>{<BR> int n;<BR> cin>>n;<BR> int *pn=new int[n];//这里可以不是编译常量<BR><BR> for (int index=0;index<n;++index)<BR> {<BR> pn[index]=index;<BR> cout<<pn[index];<BR> }<BR><BR> delete [] pn;<BR>}<BR><BR><BR>2003-10-8 9:26:24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -