例如,如果我想在屏幕上打印 char 变量的值,计算机如何知道我是指那个数字的 ascii 字符还是指那个数字?
提前谢谢。
编译器不一定会自动处理这个问题。在 C 中,这是通过格式说明符在控制台输出中处理的。
printf("This is a char:%c\n", 'c');
printf("This is an int:%d\n", 3);
如果您提供错误的数据类型作为与格式字符串中的格式说明符相对应的参数,您将收到编译器警告:
printf("This is a char:%c\n", 1); // WARNING: Implicit conversion from (int) to (char) (due to implicit down-cast)
如果您提供的参数小于预期的参数,则可能不会得到这样的编译器警告,具体取决于详细级别,即:
printf("This is an int:%d\n", 'b'); // Implicit up-cast
因此,简而言之,格式说明符让编译器知道如何在将数据打印到控制台时表示数据,并且如果存在不匹配,还将在格式说明符和相应的参数之间进行类型检查。
最后,如果你的编译器是 C99 兼容的,printf 会将一个整数转换为它的字符文字等效,如果你有一个类型不匹配:
printf("This is a char:%c\n", 99); // Prints the 'c' character literal
您可以在这里找到字符 / 数字映射:
http://www.asciitable.com/根据至“The C Programming Language”,第 2 版,
第 A4.2 节“标识符的含义”:“基本类型”,第 195 页
声明为字符 (char
) 的对象足够大,可以存储执行字符集的任何成员。如果该组中的真正字符存储在char
对象中,则其值等于该字符的整数代码,并且为非负。
因此,的作品(如果character set是ASCII,即的例子是ASCII)
int n = 65; //is equal to 'A' in ASCII
char c = 'A'; //is equal to 65 in ASCII
printf("%c %d", n, c); //should print "A 65" despite the "wrong" order
根据第 244 页的“标准库”、“格式化输出”、“printf
函数”
对于“% c”格式说明符,printf 执行以下操作:将int
转换为unsigned char
int
;转换为unsigned char
后的单个字符。
你给格式printf()
如果您使用:
char c = 'c';
printf("%c \n", c); //result is the character 'c'.
printf("%d \n", c); //result is 99, the ASCII value of character 'c'.
但请注意,切勿在 scanf 中为 char 使用格式% d,这可能会您的堆栈。
scanf("%d \n", &c); //NEVER do this.
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(32条)