在下面的代码中,
#include<stdio.h>
int main(){
char string[] = {1, 2, 3};
char* my_pointer = string;
printf("%c", *my_pointer);
}
我希望在屏幕上显示ASCII字符'1'
。
ASCII字符'1'
为49
,二进制表示为00110001
答案 0 :(得分:4)
初始化时需要给它字符:
char string[] = {'1', '2', '3', '\0'};
或者您可以使用字符串
进行初始化char string[] = "123";
使用
等数字时 char string[] = {1, 2, 3};
它将打印与数字1对应的ASCII字符(很可能不会产生任何输出)。
如果要使用数字进行初始化,则必须执行以下操作:
char string[] = {49, 50, 51};
答案 1 :(得分:0)
你的行
char string[] = {1, 2, 3};
声明一个由三个整数文字初始化的三个char
值的数组。要使用char literal初始化,请使用单引号运算符'
,如下所示。
char string[] = {'1', '2', '3', '\0'};
请注意,在初始化数组时,您需要像我上面所做的那样包含空终止符,否则您对printf
的调用将导致未定义的行为。在您对上述答案之一的评论中,您要求
为什么我需要给'1'而不是1. C是一种松散类型的语言。 1必须是类型转换为'1',因为它是字符串是字符数组
请记住,引擎盖下的char
只是数字的代表; 'character literal'语法只是语法糖,允许您以更加语义的方式创建字符常量。
char variable1 = 49;
char variable2 = '1';
在这种情况下,这两个语句完全相同。如果C应该按照你建议的方式进行投射,是应该将49
转换为4,9还是字符串“49”?目前还不清楚。 C是一种懒惰的语言 - 它没有任何聪明的技巧来帮助你,因此当你将char设置为值49时,它将分配数值。