error C2099: initializer is not a constant 或者error C2099:初始值设定项不是常量

先看一道题:

#include<stdio.h>
const int a=15;
const int b=a+15;

void main()
{
 printf("%d\n",b);

}
很有意思哟:在.c文件中报的是和你一样的,初始值设置不是常量,但在.cpp中可以,结果输出30
改成这样就行
#include<stdio.h>


void main()
{   const int a=15;
    const int b=a+15;
 printf("%d\n",b);

}
因为c编译器不支持函数外动态声明变量和分配空间,如果要必须是常量值,例如下面也不行,只要放到函数中就行
#include<stdio.h>

int c=16;
int d=c;
void main()
{   const int a=15;
    const int b=a+15;
 printf("%d\n",b);

}

同样的下面也是

#include <stdio.h>
#include <malloc.h>
#define SIZE 4

 float *p=NULL;
 p=(float *)malloc(SIZE*sizeof(float));

int main()
{
 int i=0;

 for(i=0;i!=SIZE;++i)
  p[i]=99;
 for(i=0;i!=SIZE;++i)
  printf("%f\n",p[i]);

 return 0;
}

 

要改成下面这样:

 

 

#include <stdio.h>
#include <malloc.h>
#define SIZE 4

 

int main()
{
 int i=0;
 float *p=NULL;
 p=(float *)malloc(SIZE*sizeof(float));
 for(i=0;i!=SIZE;++i)
  p[i]=99;
 for(i=0;i!=SIZE;++i)
  printf

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 错误:初始化元素不是常量。 这个错误通常出现在C语言中,表示在初始化一个全局变量或静态变量时,使用了一个不是常量的表达式。在C语言中,全局变量和静态变量必须在编译时就确定其初始值,而不能在运行时再确定。 解决方法是将初始化表达式改为常量表达式,或者将变量定义为局部变量,这样可以在运行时确定其初始值。 ### 回答2: “initializer element is not constant”是一种编译错误,这种错误通常在编译器遇到不能被预先计算的变量时出现,例如定义一个非常量的变量作为数组的初始值或静态存储的初始值。 详细来讲,对于C语言或C++,该错误通常出现在变量初始化的时候,例如: ```c++ int size = 10; int arr1[size]; // 错误:initializer element is not constant const int size2 = 10; int arr2[size2]; // 正确:size2是一个常量,编译器可以预先计算 ``` 在第一个例子中,变量`size`是一个非常量,其值只能在运行时确定,而不是编译时确定。因此,编译器无法在编译时预先计算数组的大小,从而导致错误。在第二个例子中,变量`size2`是一个常量,因此编译器可以在编译时预先计算数组的大小,因此没有错误。 类似地,在定义静态变量时,也会出现该错误。静态变量必须在编译时就具有初始值,例如: ```c++ static int value1 = 10; // 正确 static int value2 = size; // 错误:initializer element is not constant ``` 在第一个例子中,静态变量`value1`具有常量初始值,因此编译器可以在编译时计算它的初始值。在第二个例子中,变量`size`是一个非常量,编译器无法在编译时确定它的值,因此导致错误。 最后需要注意的是,如果你使用的是C++11或更新的版本,并且编译器支持变长数组,你可以通过`std::vector`或类似的容器来避免通过变量初始化静态数组的问题。例如: ```c++ std::vector<int> arr3(size); // C++11中支持变长数组 ``` 总之,“initializer element is not constant”常常因为在编译期无法确定变量的值而出现。如果想要避免这种错误,我们应该尽可能地使用常量来初始化变量或者使用C++11中支持的变长数组来解决这个问题。 ### 回答3: 在程序代码中常会遇到 error: initializer element is not constant 的错误提示。这一提示通常是由于在定义变量时,使用了一个不是常量的表达式作为初始值导致的。 定义变量时,需要指定一个初始值,如果这个初始值不是一个常量,就会出现上述的错误提示。这是因为在变量定义时,编译器需要为变量分配空间,并将初始值存储到该空间内。而由于这个初始值不是常量,因此编译器无法确定它的值是否会改变,也就无法为变量分配确定的空间。 解决这一问题的方法是使用常量作为变量的初始值常量是指在程序运行期间不会改变的值,例如字面量(如整数、浮点数、字符串等)或者用 const 关键字修饰的变量。这样,在编译时,编译器就能确定变量初始值的值,并为变量分配相应的空间。 需要注意的是,当定义的变量是静态变量或全局变量时,必须使用常量作为初始值,并确保该初始值在编译时已经确定。而对于自动变量和动态分配的内存空间,初始值可以是一个变量,只要该变量的值在程序运行期间不会改变即可。 综上所述,error: initializer element is not constant 错误提示通常是由于使用了非常量作为变量初始值导致的。解决方法是使用常量作为变量初始值,以确保编译器能够为变量分配正确的空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值