我们假设我的 C程序:
中有以下代码#include <stdio.h>
void PrintSomeMessage( char *p );
int main(int argc, char *argv[]) {
char arr[10] = "hello";
PrintSomeMessage(&arr[0]);
return 0;
}
void PrintSomeMessage(char *p)
{
printf("p: %s",p);
}
为什么输出的结果是“你好”而不是单个字符“h”?
我理解,如果我在格式化程序中放置"%c"
,它将只打印一个字母。但是,此地址中每个字母的内存地址不同。请有人向我解释一下吗?
答案 0 :(得分:26)
但是,此地址中每个字母的内存地址都不同。
内存地址不同,但作为字符数组,它们是连续的。当您传递第一个元素的地址并使用%s
时,printf
将打印从给定地址开始的所有字符,直到找到'\0'
。
答案 1 :(得分:5)