簡體   English   中英

無法在C中將int初始化為0

[英]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; 僅初始化ac ,但b保持未初始化。

(順便說一句,讀取未初始化的變量具有未定義的行為 。)

int maxR, maxG, maxB = 0;

變成:

int maxR;
int maxG;
int maxB = 0;

因此, MaxRMaxG未初始化。

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.

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