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