本人自学C++。
书上说:“数组的界,必须是在编译时就可求出的常量表达式,其值必须为正整数”
貌似书上的意思是:如果数组的界在编译时不确定,就必须用【动态数组】,也就是:
int *pointer = new int [variable] ();
pointer[0] = constant;
可是我用的Windows上的devcpp,和Mac上的Xcode开发环境都允许以下代码成功编译:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int x[n];
for (int i = 0 ; i < n; i++) {
x[i] = i;
cout << x[i] << " ";
}
system("pause"); //mac上不用
return 0;
}
这是怎么回事?是编译器太高级了?
谢谢!
我是在Xcode上用的C++,没有用Objective-C也没有用AppleScript。。谢谢。。
追答即使不是Object c,更具上述原理,一定是编译器有类似于object c的功能,要看过究竟,请在调试中切换到反汇编窗口,一看就什么都明白了,比如他怎么替换你的变量,怎么插入其他函数
追问devcpp也有支持类似于Objective-C的功能?。。。我看不懂汇编语言。。。。。。
追答那devcpp编译器文档上一定有说明的,这种货色都是这样,综合上搞不过vc编译器,就爱在写小问题上搞点突破传统的东西。上述代码中,栈指针下压空间一定是运行时计算的,那么他的效率一定敌不过传统的方法,但是硬件总是比软件升级快的,,这点性能损失在大多数情况下可以忽略
追问相当于编译器自动把普通数组换成动态数组了对吧
追答差球不多
为什么有的C++编译器里数组的大小是变量时不会出错,有的会出错.
C++标准里明确规定:数组的初始化必须是常量、或者常量表达式。所以上面的代码只在一部分编译器里面能够编译通过,如:MinGW 微软的编译器是不能编译通过这个的,因为微软的编译器没有在标准的基础上进行扩展,但是MinGW编译器却扩展了数组中的初始化方式,所以如果楼主想要编译一个跨平台的程序,就不要使用...
关于C++语言中数组越界的问题
这种应该不算是异常,是程序的bug,用C++的异常处理也比较难捕捉,越界读写都可能导致错误的结果,甚至导致程序崩溃,要处理这种情况只能靠平时写代码时多积累,在有可能发生越界的地方做相应的判断处理。另外,可以用一些静态代码检查工具来帮助发现问题,但是并不能保证所有问题都能发现,关键还是要靠程序...
c++中怎样声明数组
printf("%lf", b[3]); \/\/ 输出数组b的第4个元素(数组下标从0开始)
为什么在c++中定义数组时数组的常量表达式不能包含变量?
你是指常量表示数组大小,还是初始值?但不管是什么,都原理一样,以数组大小为例,在C++中,有些变量是在编译期间,编译器就给分配空间的,有的是运行时候才分配空间,对于编译期间就分配空间的变量,编译器一定要知道它是多少长度的,才能分配适合那个长度的空间,静态数组,临时变量,全局变量之类都是...
在VC++中常量和变量有什么区别?
4、布尔常量boolean:true或false5、字符串常量:比较特殊的一种类型,它不是内置或基本的数据类型,实际上就是字符常量数组,它由字符串文字本身以及编译器加上的表示结束的空(NULL)字符组成。字符串常量“Ab”在内存中的实际格式是’A’’b’’\\0’如果程序中”two””Some”紧邻,C++编译器会把它们连在一起,并...
C++语言编程概念:常量、常量表达式和常量初始化
C++11引入的constexpr关键字,为编程者提供了编译时求值的可能。通过constexpr声明的变量和函数,可以在编译期间得到其值,为需要常量表达式的场景带来了便利。初始化的艺术 初始化非局部变量时,静态变量会优先进行常量初始化。例如,结构体中的静态常量c在main函数前就被赋值为5,而constexpr变量d则依赖于...
什么叫常量表达式
地址常量:虽然看起来像是可以改变,但C++中的地址通常在编译时就被确定,不随运行时变化。符号常量:预定义的标识符,如PI或MAX,它们代表预定义的固定值,不会在程序中改变。常量表达式的用途广泛,如在代码中作为数组大小、循环次数等,它们提供了一种确定性和稳定性,增强了代码的可读性和可靠性。
C++ 红线提示:表达式必须含有常量值
c++数组定义的基本要求,必须是常量 你可以用动态数组
...c++二维数组定义的问题,为啥程序说表达式必须含有常量值呀,明明是形...
因为在这个函数里,n是参数,作为变量处理了。你要把a改成动态分配,new或者malloc
常量表达式是什么?
在多种编程语言中,如C、C++、Java等,都有对常量表达式的支持。常量表达式的特点主要有以下几点:1. 固定值:常量表达式的值在编译时就已经确定,并且在程序运行过程中保持不变。这使得它们成为程序中稳定的参考点。2. 提高效率:由于常量的值不会改变,编译器可以对使用常量表达式的代码进行优化,从而...