C语言二维数组元素类型疑问:赋值用单引号的原因及类型确认
关于你的C语言数组问题解答
数组元素的实际类型
你声明的int accumulator[10][10];是int类型二维数组,每个元素的类型都是int,完全符合你想要整数元素的需求。
单引号'0'的问题
'0'是字符常量,在C语言中它对应的ASCII码值是48,不是整数0。把它赋值给int类型数组元素时,数组里实际存储的是48,而非你期望的整数0。- 你用
printf("%c ", accumulator[i][j]);输出时,%c格式符会把整数转换成对应的ASCII字符,所以48会被显示为字符'0',看起来结果正确,但数组内部存的并不是整数0。
正确实现10×10全零整数数组
要得到真正的全零整数数组,需要两处修改:
- 赋值时使用不带单引号的0(整数常量);
- 输出整数0时用
%d格式符(对应十进制整数输出)。
修改后的完整代码:
#include <stdio.h> #include <stdlib.h> int main() { int accumulator[10][10]; int i, j; // 遍历整个10×10数组赋值为0 for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { accumulator[i][j] = 0; printf("%d ", accumulator[i][j]); } printf("\n"); } return 0; }
另外,还有更简洁的初始化方式:在定义数组时直接初始化,C语言会自动将未显式赋值的元素设为0,所以一行就能搞定全零初始化:
int accumulator[10][10] = {0};
内容的提问来源于stack exchange,提问作者mbruenning
相关产品推荐
相关产品推荐

