![](/img/trans.png)
[英]How to read numbers into an array without specifying the array size in C language
[英]How C language array provides a random numbers?
我是 C 語言的新手,在學習數組時發現了以下問題。
#include <stdio.h>
int main (void){
int array [10];
array [5] = 15;
printf("%d\n", array[5]);
printf("%d\n", array[9]);
return 0;
}
在這個 main 方法中,當我初始化數組的值時,第一個 printf 方法返回 15。
而且我希望其他未初始化的值,例如 array[9] 返回 0,但是第二個 printf 方法在我的 WSL2 Ubuntu 系統中返回隨機數,例如 32764。
在我正在觀看的教程視頻中,它返回 0。有什么區別,這是如何發生的?
在 C(甚至 C++)中,將術語Initialization和assignment分開是很重要的。 初始化僅發生在聲明變量的行。 例子:
int array [10] = { [5] = 15 }; // initialization
理論上,這條線可以在程序加載時在基於 RAM 的系統(如 PC)上計算。 然而,賦值只發生在運行時,只要你設置一個變量的值:
array[5] = 15; // assignment
區別很重要,因為 C 對初始化某些東西時會發生什么有很多規則。 例如,如果您僅初始化數組中的一項,則保證其余項初始化為零。 如果您不初始化任何項目並且數組是本地的(“自動存儲”),那么它將包含垃圾值。
因此,您的示例自printf("%d\n", array[9]);
以來具有未指定的輸出。 打印一個不確定的值。 它可以通過將分配更改為初始化來修復,如我所示:
int array [10] = { [5] = 15 };
或者,如果您願意,這是等效的:
int array [10] = { 0,0,0,0,0,15 };
你所做的是去酒店服務台連續預訂10個房間。 現在他們可以為所欲為,但這家酒店沒有清潔人員。 它只關心房間沒有被預訂,所以之前住戶留下的東西都還在。
因此,您將 15 保存到 6 號房間將清理它並將 15 放入那個房間,但其余的仍然是您得到的。
無論如何,這並不是數組所獨有的,您保留的所有內存都是由您處理和管理的。
您尚未初始化array[9]
。 當您不在 C 中初始化任何變量時,它將包含垃圾值,它可以是任何東西,並且不一定總是0
。 這就是為什么你不斷得到一些隨機數。
而得到垃圾值0
的人有他自己的運氣。
你想成為工程師。 C是一種非常低級的語言。 這意味着程序員可以控制內存。
如果您聲明某個變量,在本例中為數組,則該數組分配了“n”字節的內存。 通常,此字節與 0 不同,因為其他程序一直在同一內存空間中執行某些操作。
如果你想初始化數組並且所有這些值你想為0:
int array[10] = {0};
該指令將數組中的所有內存空間歸零。
然后,當您執行時,您將擁有
int array[5] =15;
int array[9]=0;
在這里你有變化:
#include <stdio.h>
int main (void){
//int array [10];
int array[10] = {0}; //init all to 0 values
array [5] = 15;
printf("%d\n", array[5]);
printf("%d\n", array[9]);
return 0;
}
我希望我有所幫助
我希望其他未初始化的值,例如 array[9] 返回 0
未初始化的變量,嗯,沒有初始化。 [1]不歸零,不歸零。 你可以得到任何東西。 它甚至可以殺死你的程序來使用這些數據。
如果要將數組元素初始化為零,請使用
int array[10] = { 0 };
(如果您初始化數組或結構的任何元素,則任何未提供值的元素都將初始化為零。因此,這里有一個0
就足夠了。)
static
關鍵字聲明的變量)將隱式初始化為零。1、Uninitialized,它的值有兩種可能:一種是全局數組,被編譯器初始化為0。 一種是局部數組,它是一個隨機數。 2、已初始化、局部數組和全局數組,已初始化、未賦值的數組將被賦值為0。
未初始化的數組將不等於 0,但可以是任何數字,因此您需要:
int array[10] = {0};
將數組初始化為 0,a[9] 將返回 0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.