在c中打印数组元素时出现意外输出

在c中打印数组元素时出现意外输出,c,arrays,C,Arrays,我正在创建一个简单的c程序,下面的程序输出应该是2,但我得到50不知道为什么(我是c新手)请让我知道我在哪里失踪 #include<stdio.h> int main(int argc, char** argv) { int a[4]={'1','2','2','\0'}; printf("The value of a is %d",a[1]); return 0; } #包括 int main(int argc,字符**argv){ INTA[4]={'1','

我正在创建一个简单的c程序,下面的程序输出应该是2,但我得到50不知道为什么(我是c新手)请让我知道我在哪里失踪

#include<stdio.h>
int main(int argc, char** argv) {
   int a[4]={'1','2','2','\0'};
   printf("The value of a is %d",a[1]);
   return 0;
}
#包括
int main(int argc,字符**argv){
INTA[4]={'1','2','2','0'};
printf(“a的值为%d”,a[1]);
返回0;
}

您使用初始化数组<代码>'2'具有整数值50

将数组初始化为

int a[4]={1,2,2,0};
如果希望它包含整数1,2,2,0。或

#include<stdio.h>
int main(int argc, char** argv) {
   char a[4]="121";
   printf("The value of a is %c",a[1]);
   return 0;
}
#包括
int main(int argc,字符**argv){
字符a[4]=“121”;
printf(“a的值为%c”,a[1]);
返回0;
}

如果您想要一个可以作为字符串处理的字符数组。(注意此处使用了
%c
格式说明符。)

50
'2'
的ASCII码

如果需要修复,请将
'2'
替换为
2

当使用像
'2'
C这样的字符文本时,实际上将它们视为整数类型。当您使用
%d
格式说明符打印它时,您告诉C将值打印为整数

如果要保留如下数组元素:
'2'
,则需要将printf格式更改为
%c
,以便在控制台中获得
2

这条线

int a[4]={'1','2','2','\0'};
告诉编译器创建一个长度为4的整数数组,并将右大括号中的整数放入其中

C
中的字符是1字节整数,
1
1
的字符,表示其ASCII码的整数值,即50。因此数组的第一个元素的值为50

要解决这个问题,你应该写

int a[4]={1,2,2,0};
请记住,
0
不能用作数组结束标记,因为它只是一个数字

如果您想得到
122
输出,那么就这样做

char a[4]={'1','2','2','\0'};
printf("The value of a is %s",a);
因为
C
中的字符串是以
0
作为终止符号的字符数组

您还可以让编译器为您计算值

char a[]={'1','2','2','\0'};

您正在分配字符而不是整数:

'2' means char       use %c
 2  manes int        use %d
"2" means string.    use %s
所有这些都是不同的:

在代码中,您可以打印2:

int main(int argc, char** argv) {
   char a[4]={'1','2','2','\0'};
   printf("The value of a is %c",a[1]);
   return 0;
}

当你写
inta[4]={'1','2','2','0'}
您实际使用数字1和2的ASCII代码初始化了数组。 这是因为您将它们括在单引号中,从而使它们成为字符而不是整数。 因此,数组实际上取
inta[4]={49,50,50,0}
要更正它,您应该写入不带引号的整数:

int a[4]={1,2,2,0};

还要注意,整数数组不需要以
'\0'
结尾。这只适用于字符数组。

请您回答我的一些问题,在这里重新分级。显然,这在任何语言中都“有效”。例如,在java
System.out.println((int)'2')打印
50
。我已更正。不幸的是,除非你现在编辑问题,否则我不能删除我的否决票。我不在乎你的否决票。此网站提供的信息很好,不适用于销售代表:)