首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C\C++怎么定义常量数组

2013-08-09 
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]; 这样的定义.
引用:
你的意思是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标准来写程序,本来用的就不是纯C编译器,在C++中是允许const int变量以及enum变量作为数组长度的,所以我想能不能用一个const int 数组来定义长度,因为我原本以为const int数组中的元素也是固定不可改变的,所以就想当然了,结果发现编译器报错,才知道自己是错的,我在这里提问是想知道有没有办法定义一个数组,使得数组中的元素是不可改变的常量。

c++中建议用const int N = 3;来代替宏#define N 3  ,不仅仅是允许,是建议。因而可以想到的是,编译器不会真在常量数据段中为3分配空间,而是像宏一样,在编译时把所有的N换成3。
但对于 const int a[3],编译器会在数据段中为数组开辟空间,于是b[(a[0])]小括号中的值就只能运行时确定了。

热点排行
Bad Request.