我是一个 C 编程新手。
通过其他问题的答案,我可以理解“角色”一词可能指向不同的元素;例如字母和数字。
我将“字符串”视为字符。
然后,请看以下几行:
#include <stdio.h>
main()
{
int numbers = 123;
printf("%c%s\n", "N", numbers);
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此代码时,显示错误消息并且编译失败。
教科书“C 编程语言”第 13 页对 printf 格式说明符的说明如下;
“
%c为性格”“
%s为字符串”。
第一个问题:
虽然“N”是一个字符,但为什么%c说明符无效?
第二个问题:
尽管变量“numbers”的值为“123”,但它们是数字,包含在字符中。
我认为字符等于“字符串”。
那么,虽然我用 %s 表示“123”,但为什么无效呢?
我知道我的代码会起作用,如果我像下面那样修改它们:
#include <stdio.h>
main()
{
int numbers = 123;
printf("%s%d\n", "N", numbers);
}
Run Code Online (Sandbox Code Playgroud)
但我想了解为什么上面的代码无效。
Rob*_*rtS 10
“虽然
"N"是字符,但为什么说明%c符无效?”
"N"不是字符常量。它是一个字符串文字。'N'是一个字符常量并且匹配到%c. 单引号和双引号之间的区别很重要。
此外,说明符永远不会无效。只有参数类型可以。
“那么,虽然我已经使用
%s了"123",为什么无效?”
您没有使用"123", 它是一个字符串文字并发出一个char *. 你用123. 123是存储在类型对象中的整数值int numbers。一个int参数是不允许的%s格式说明这需要类型的参数char *,而不是int。
这就是区别。
指令
printf("%c%s\n", "N", numbers);
Run Code Online (Sandbox Code Playgroud)
包含两个错误。
格式说明符%c期望传递单个字符。我们在 C 中定义字符常量的方式是使用单引号'N'。
通过使用双引号,"N"您正在使用C 提供的一种语法糖方式来表示字符串,即由字符串终止符关闭的字符数组'\0'
123是一个整数,就像你正确地写了%d格式说明符一样
说到最后一个错误,你给出了原创解读
虽然变量“数字”的值是“123”,但它们是数字,包含在字符中。
我认为字符等于“字符串”。
那么,虽然我用 %s 表示“123”,但为什么无效呢?
虽然这显然是一个错误的解释,但我觉得它很有趣,值得解释。
是123一个字符串,也就是一个字符序列?就是这样!但它是源代码中的一个字符串。编译器将解析这个字符序列,识别一个整数,并确保这个值存储在一个包含整数的内存位置中。在大多数现代计算机中,它会转换为0/1以 4 个字节表示数字 123的序列。
0b01111011
Run Code Online (Sandbox Code Playgroud)
"123"从源代码的角度来看是不是一样?嗯,不。该数字被双引号括起来,因此编译器会将其解释为实际字符串,并作为以空字符结尾的字符序列存储在内存中
--------------------------
| '1' | '2' | '3' | '\0' |
--------------------------
Run Code Online (Sandbox Code Playgroud)
并在内存中存储代表这些数字的 ASCII 值(假设使用 ASCII 编码)
-----------------------------
| 0x31 | 0x32 | 0x33 | 0x00 |
-----------------------------
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |