簡體   English   中英

我懷疑 C++ 如何處理數組

[英]I'm having doubts about how C++ is handling an array

當我被int arrayF[0]; “崩潰”時,我只是想了解 c++ 是如何工作的。 在第 6 行,和int arrayF[input]; 在第 21 行。在計算機 memory 中,這個arrayF的第一個版本不應該被第 21 行的版本覆蓋? 我知道int arrayF[input]; 又是scope,但還是做該做的,還是不行?

我測試了另一件事(不知道為什么)從int arrayF[input];中刪除了int 在第 21 行,就像我試圖訪問該地址一樣,程序以某種方式按預期工作。 為什么? 嘗試訪問不存在的地址時應該會出現錯誤。

是的,這是一個斐波那契程序,我的目的不是讓它完全正確,我只是在搞亂語言。

#include <iostream>
#include <string>

using namespace std;

int arrayF[0];
int fiboR(int i, int n)
{
        if(i == n) return arrayF[n];
        else
                arrayF[i + 2] = arrayF[i] + arrayF[i + 1];
                return fiboR(i + 1, n);
}

int main(int argc, char *argv[])
{
        int input = stoul(argv[argc - 1]);
        int start = stoul(argv[argc - 2]);

        int arrayF[input];
        arrayF[0] = 0;
        arrayF[1] = 1;

        cout << fiboR(start, input) << "\n";

        return 0;
}

該程序通過使用命令行 arguments 調用它來工作, 0是第一個斐波那契數列索引,一個起始參數。 下一個數字是斐波那契數列的所需索引

Output 與int arrayF[input]; 第 21 行:

$./a.out 0 10

0

Output 與arrayF[input]; 第 21 行:

$./a.out 0 10

55

int arrayF[0];

該程序格式錯誤。 數組變量的大小不能為零。

 if(i == n) return arrayF[n];

即使我們假裝允許空數組變量,那么該數組的所有索引都將超出數組的范圍。 無論n的值是多少,這都將超出范圍讀取,並且程序的行為將是未定義的。

 int arrayF[input];

數組的大小必須是編譯時常量。 input不是編譯時間常數。 程序格式錯誤。

請注意,第二個數組變量是main function 的本地變量fiboR function 在 scope 之外,它不會看到此變量。

memory 這個 arrayF 的第一個版本不應該被第 21 行的版本覆蓋?

這不是 C++ 的工作原理。 arrays 都存在於 memory 的不同部分。嵌套 scope 中的名稱隱藏了內部 scope中的另一個名稱 - 但不在其 scope 之外。

我測試了另一件事(不知道為什么)從 int arrayF[input] 中刪除了 int; 在第 21 行,就像我試圖訪問該地址一樣,程序以某種方式按預期工作。 為什么? 嘗試訪問不存在的地址時應該會出現錯誤。

越界訪問的行為是未定義的。 即使您可能希望得到一個錯誤,也不能保證您會得到一個錯誤。 顯然你這次運氣不好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM