麦克雷 Mavom.cn

标题: number不是常数吗 为何错误 [打印本页]

作者: c20415646    时间: 2022-12-22 19:45
标题: number不是常数吗 为何错误
(, 下载次数: 0)
(, 下载次数: 0)
作者: umurar    时间: 2022-12-22 19:45
(, 下载次数: 0)
作者: waaygacm97    时间: 2022-12-22 19:46
因为const int只在C++中才被视为常量,且VS不支持VLA
作者: 艾的民    时间: 2022-12-22 19:46
VS不让定义变长数组,因为用的编译器不是GCC的
但是可以这样实现同样的功能,比如:


#include<stdio.h>


int main(){
int n=0;
scanf("%d",&n);
int* num = new int[n];//分配动态存储空间
for(int i=0;i<n;i++){
scanf("%d",&num);
}
for(int i=0;i<n;i++){
printf("%d ",num);
}
delete num;//记得删掉
return 0;
}
作者: 艾的民    时间: 2022-12-22 19:47
大佬免费解答问题

(, 下载次数: 0)
作者: shiyuanz    时间: 2022-12-22 19:47
没错,只是vs不能支持完整的c语言标准
作者: aixxxbb    时间: 2022-12-22 19:48
可以定义一个名字为prime的指针,然后用malloc
作者: jason_og9F5    时间: 2022-12-22 19:49
老生常谈的问题,常量是define的。
int是变量,所以吧int换成define就好了。
作者: als6k4d9i    时间: 2022-12-22 19:50
gcc也不可以吧
作者: shentengfei    时间: 2022-12-22 19:50
const其实是不可改变的意思,不能说是标准的常量
作者: bws    时间: 2022-12-22 19:51
const换成constexpr试试,const只是表示只读,常量的意义有constexpr表示
作者: nknusqhkfgkx    时间: 2022-12-22 19:51
constexpr才是常量
作者: 艾的民    时间: 2022-12-22 19:52
变长数组,有的编译器不支持。最好别这么弄
作者: 契约者    时间: 2022-12-22 19:52
首先,const变量也是变量。用变量作为长度的数组在C23标准之前绝对禁止初始化,从C23开始只允许全零初始化,即以下形式:
int n = 10, a[n] = {};
其次,您可能是MSVC的受害者。VS默认使用的MSVC是C++编译器,并不能完全支持C的编译。如果要使用VS编译C程序,在项目属性中把平台工具集换成LLVM

(, 下载次数: 0)
作者: 艾的民    时间: 2022-12-22 19:53
不支持变长数组,用gcc编译就可以。
而且你还有一个问题,变长数组不能初始化,因为变长数组需要等变量值确定以后,才在程序中创建。
你以为可能是变量的数值替换括号里的文本,实际上不是这样,实际上是在程序执行中才创建的数组,所以不能在定义时初始化。
而且这玩意本质上也是静态数组,很不好用,还是malloc好使,学学用这个。




欢迎光临 麦克雷 Mavom.cn (http://www.mavom.cn/) Powered by Discuz! X3.5