问题1:我的朋友问我一个问题,我想证明我的理解是正确的。如果我声明一个特定大小的数组,但不指定每个元素的值,则将其打印出来,得到全0。但这是使它们正确为0的编译器吗?我只需要声明一个X大小的数组,就可以分配一个正确大小的连续块吗?我不应该指望它们始终为零,而应自己手动对其进行初始化。
问题2:我在留言板上看到,较新的c ++允许您声明具有用户定义大小的数组。这对我来说没有意义,我一直认为需要在编译时就知道它。怎么了 这是语法糖吗?到底发生了什么事?
#include <iostream>
using namespace std;
void question2()
{
int userInput;
cin >> userInput;
int anotherArray[userInput];
}
int main()
{
int array[5];
for (int i = 0; i < 5; i++) {
cout << array[i] << endl;
}
cout << endl;
question2();
}
Run Code Online (Sandbox Code Playgroud)
我希望从main发出混乱的输出,并显示类似“ userInput not const”之类的错误,但是我得到0 0 0 0 0和用户输入,并且进程在2.857秒后退出,返回值为0
如果我声明一个特定大小的数组,但不指定每个元素的值,则将其打印出来,得到全0。但这是使它们正确为0的编译器吗?
正确。
我只需要声明一个X大小的数组,就可以分配一个正确大小的连续块吗?
正确。
我不应该指望它们始终为零,而应自己手动对其进行初始化。
正确。
您可能会看到编译器会帮忙做一些额外的工作,因为它是调试版本。通常,这些值是未指定的,并且读取它们具有未定义的行为(因此,您可能会希望得到任何旧的垃圾;这不只是学术上的)。
我在留言板上看到,较新的c ++允许您声明具有用户定义大小的数组。这对我来说毫无意义,
忽略留言板的充分理由。
我一直认为它需要在编译时就知道。
你一直都是对的。
怎么了 这是语法糖吗?
C具有“可变长度数组”。GCC允许它们作为C ++的扩展;忽略它。
到底发生了什么事?
更复杂的叠加魔法。
我希望从main发出混乱的输出,并显示类似“ userInput not const”之类的错误,但是我得到0 0 0 0 0和用户输入,并且进程在2.857秒后退出,返回值为0
零是有效的乱码结果,并且编译器允许使用VLA(如上所述);如果您进入“适当的” C ++模式(例如,通过传递-Werror=vla给GCC),它将更加严格。我建议。
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |