[英]Why can't I use a constant int to declare an array AND initialize it in C?
[英]Can't initialize int at 0 in c
我正在制作一個圖像處理程序,並且初始化了以下變量:
int minR, minG, minB = 255; int maxR, maxG, maxB = 0;
printf("%d", maxG);
當我打印此圖像時,沒有得到應有的0,而是得到16384作為maxG的值。 但是,如果我這樣做:
int minR, minG, minB = 255; int maxR, maxB = 0;
int maxG = 0; printf("%d", maxG);
然后一切順利。
有誰知道為什么會這樣嗎? 謝謝。
初始化程序僅適用於其后的一個聲明符,而不適用於列表中的任何其他聲明符!
所以int a = 10, b, * c = NULL;
僅初始化a
和c
,但b
保持未初始化。
(順便說一句,讀取未初始化的變量具有未定義的行為 。)
int maxR, maxG, maxB = 0;
變成:
int maxR;
int maxG;
int maxB = 0;
因此, MaxR
和MaxG
未初始化。
int maxR, maxG, maxB = 0;
在這里,只有maxB
初始化為0
。
更簡單的檢測方法:
使用-Wall
或-Wextra
編譯。
int minR, minG, minB = 255; int maxR, maxG, maxB = 0;
printf("%d", maxG);
$ gcc -o exe -Wextra
warning: ‘maxG’ is used uninitialized in this function [-Wuninitialized]
更簡單的方法:
int maxR, maxG, maxB;
maxR = maxG = maxB = 0;
第一行是聲明。
下一行是分配,從左到右評估。
(maxR = (maxG = (maxB = 0)));
int minR, minG, minB = 255; int maxR, maxG, maxB = 0;
printf("%d", maxG);
就好像
int minR;
int minG;
int minB = 255;
int maxR;
int maxG;
int maxB = 0;
printf("%d", maxG);
但是maxG尚未初始化,因此它指向內存中的某個位置。 16384是您嘗試打印時的實際值maxG,但可以是任何值!
想象我的記憶是這樣的XXXXXXXX919A9F7B62A526XXXXXX
想象當你做
int maG;
為其分配的內存指向此處
XXXXXXXX919A9F7B62A526XXXXXX
^
因為我假設您的系統告訴sizeof(int)是4 * 8位,所以printf將打印
XXXXXXXX919A9F7B62A526XXXXXX
^^^^^^^^
1o2o3o4o
9A9F7B62(十六進制)= 2594143074(十進制)
因此,您需要在打印前將maxG初始化為某種東西! :)
您需要初始化所有變量。
int minR = 255, minG = 255, minB = 255; int maxR = 0, maxG = 0, maxB = 0;
該語句應如下所示:
int minR = 255, minG = 255, minB = 255; int maxR = 0, maxG = 0, maxB = 0;
語句中的maxG
仍未初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.