[英]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.