如何在C ++中为数组分配大小?

时间:2018-08-27 22:10:08

标签: c++

如果我们使用4个元素初始化数组,例如:

var express = require('express');
var app = express();
const port = 5000;

var gotit = [];
var Request = require("request");
Request.post({
    "headers": {
        "content-type": "application/json",
        "Authorization": "34ca0e9b-ecdd-4736-a432-d87760ae0926"
    },
    "url": "https://www.lifeguard.insure/v1/quote",
    "body": JSON.stringify({
        "category": "Auto",
        "zipcode": "90293",
        "age": 35,
        "gender": "Male",
        "key": "a2bf34ab-8509-4aa6-aa9e-13ae7917e1b8"
    })
}, (error, response, body) => {
    if (error) {
        return console.dir(error);
    }
    var a2 = (JSON.parse(body));
    console.log(a2)
    gotit = a2;
});

console.log("Gotiit")
console.log(gotit);

app.get('/api/customers', (req, res) => {
    res.json(gotit);
});

app.listen(port, () => console.log("Server Started"));

我们可以分配这样的值吗,因为它也有4个值:

int array[4];

4 个答案:

答案 0 :(得分:5)

对数组的越界访问具有未定义的行为,这是表示“意外后果”的另一种方式:

int a[4];
int b[4];

for(int i=5;i<9;i++){
  a[i] = i;
}

在调试器中,观察其工作情况,尤其是观察b会发生什么情况。

这可能会崩溃,也可能不会崩溃,但是它仍然是损坏的代码。 C ++不会总是提醒您这种情况,作为开发人员,您有责任在访问某些结构时了解允许和不允许的事情。

超出范围访问数组并不总是会导致崩溃,但这总是有问题的。尝试使用i = 999999i = -9,看看会发生什么。

行为不确定的问题是,它似乎正在起作用,但是这些意外后果最终会追上您。这使调试代码变得非常困难,因为越界写入可能会在初始错误发生后几分钟或几小时内破坏您需要在其他地方使用的变量,然后然后程序崩溃。由于原因和结果之间的时间间隔非常长,这类错误最令人讨厌。

这与将点燃的火柴扔到垃圾中不会每次都引起火灾相同,但是当它确实引起火灾时,您可能不会注意到,直到为时已晚。在C ++中,您必须非常警惕不要在代码中引入未定义的行为。

答案 1 :(得分:3)

您正在混淆两种构造-用于循环迭代的逻辑和数组的索引。

您可以使用

for(int i=5;i<9;i++){
  ...
}

运行循环四次。但是,许多人不使用i的值来访问数组。数组索引必须适当偏移才能有效。

for(int i=5;i<9;i++){
   int index = i - 5;
   std::cin >> array[index];
}

答案 2 :(得分:1)

否,您将获得一个具有4个插槽的阵列。这些插槽是

array[0]
array[1]
array[2]
array[3]

因此您的代码不正确。它似乎可以正常工作,但是由于所谓的“未定义行为”而仍然是错误的,下周它可能会失败

注意。您最好在c ++中使用std :: vector

答案 3 :(得分:1)

  

我们可以分配这样的值吗,因为它也有4个值:

for(int i=5;i<9;i++){

 cin>>array[i];

不,我们不能。由于数组的大小为4,因此只能访问的索引分别是0、1、2和3。访问任何其他索引都将具有不确定的行为。

  

尝试在正在运行的任何联机编译器中运行它。

该行为是不确定的。可能的行为包括,但不能保证以下任何一种行为:

 - working
 - not working
 - random output
 - non-random output
 - the expected output
 - unexpected output
 - no output
 - any output
 - crashing at random
 - crashing always
 - not crashing
 - corruption of data
 - different behaviour, when executed on another system
 -                    , when compiled with another compiler
 -                    , on tuesday
 -                    , only when you are not looking
 - same behaviour in all of the above cases
 - anything else within the power of the computer (hopefully limited by the OS)