C\C++如何定义常量数组不是在类里面。一般这样定义 const int a[3]{1,2,3}const float f[3]{1.1,2.2,3.3
C\C++如何定义常量数组
不是在类里面。
一般这样定义 const int a[3]={1,2,3};
const float f[3]={1.1,2.2,3.3};
a和f中的元素好像都可以改变,如果拿a的元素来做数组长度的话编译器就会报错,有没有什么方法定义常量数组,可以使得数组的元素也是一个定值。
不要使用枚举,也不要使用动态分配。 C C++ 常量数组
[解决办法]
不推荐干这样的事情,常量的数组,需要是啥?
struct A
{
static const int arr[10];
};
const int A::arr[10]={1,2,3};
[解决办法]
你的意思是int b[a[0]]吗?
不行 只能动态分配
我手头正好有书翻了一下
谭浩强 C程序设计(第四版) P143 中这样说明:
如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非常量表达式。如:
void func(int n)
{
int a[2*n]; //合法,n的值从实参传来
……
}
但是我试了一下 行不通的 这书坑爹啊
D:\test\test.cpp(4) : error C2057: expected constant expression
D:\test\test.cpp(4) : error C2466: cannot allocate an array of constant size 0
D:\test\test.cpp(4) : error C2133: 'b' : unknown size
只能动态分配了 那个也不是很复杂啊
[解决办法]
这个c语言标准里没说一定要实现,由编译器自由发挥,gcc实现了int a[n]; 这样的定义.
[解决办法]
除了强制转换,不能修改。
强制转换意味着你(程序员)要对你行为负一切责任。
[解决办法]
c++中建议用const int N = 3;来代替宏#define N 3 ,不仅仅是允许,是建议。因而可以想到的是,编译器不会真在常量数据段中为3分配空间,而是像宏一样,在编译时把所有的N换成3。
但对于 const int a[3],编译器会在数据段中为数组开辟空间,于是b[(a[0])]小括号中的值就只能运行时确定了。
