你好,我想问的每个人,我已经读过,我们只能使用指针和使用malloc或newlike来声明动态数组。
int * array = new int[strlen(argv[2])];但我已经写了
int array[strlen(argv[2])];它没有给我任何错误
我读过静态数组只能通过给定常量数组大小来声明,但是这里我给出了静态数组的可变大小。
为什么这么感谢
它是安全的使用,还是有可能在任何后期阶段,它会造成问题,我正在使用gcc linux。
发布于 2011-10-08 11:52:46
您所拥有的是一个可变长度数组(VLA),它不是C++的一部分,尽管它是C99的一部分。许多编译器提供了这个特性作为扩展。
即使是非常新的C++11也不包括VLA,因为整个概念并不适合于C++11的高级类型系统(例如,什么是decltype(array)?),C++为运行时大小的数组(比如std::vector)提供了开箱即用的库解决方案。
在GCC中,用-std=c++98/c++03/c++0x和-pedantic编译会给你一个警告。
发布于 2011-10-08 11:54:12
C99 support variable length array,它在c99中定义了6.7.5.2节。
发布于 2011-10-08 11:54:45
你用C99写的作品。这是一个名为“可变长度数组”的新加法。通常不鼓励使用这些数组,因为没有接口可以使分配失败(malloc可以返回NULL,但是如果不能分配VLA,程序将出现分段错误或更糟的错误行为)。
https://stackoverflow.com/questions/7696591
复制相似问题