繁体   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