假设我有两个功能:
void function1(int *ptr) {
printf("%d", *ptr);
}
Run Code Online (Sandbox Code Playgroud)
和
void function2(char *str) {
printf("%s", str);
}
Run Code Online (Sandbox Code Playgroud)
为什么function2工作,以前没有deference运算符str
?在str
只存在地址它指向的不是价值,因为我以为.
当str之前没有deference运算符时,为什么function2工作
因为%s
,如标准所定义的,期望a char *
,即地址.
7.21.6.1
如果不存在l长度修改器,则参数应该是指向字符类型数组的初始元素的指针.数组中的字符被写入(但不包括)终止空字符.如果指定了精度,则不会写入多个字节.如果未指定精度或大于数组的大小,则数组应包含空字符.
因为a pointer to a char
在使用时很特别printf
.它将其视为指向单个char的指针,而不是将其视为指向NUL
分隔的字符数组中第一个元素的指针,而不是仅仅指针.