【发布时间】:2013-06-02 11:09:02
【问题描述】:
假设我的 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);
}
为什么这个输出会是整个单词“hello”而不是单个字符“h”?
不过,我明白,如果我在格式化程序中输入 "%c",它只会打印一个字母。但是,这个地址中每个字母的内存地址还是不同的。请问有人给我解释一下吗?
【问题讨论】:
-
注意:
%c不需要打印地址,%s需要前往\0,正如@Rohan 在回答中解释的那样。 -
@SuvP
printf()和%c需要 value 变量,它不应该需要地址来访问 single 的值很明显/合乎逻辑b> 元素(可以按值传递)。在哪里打印需要地址才能到达的字符串,直到\0遇到他在回答中解释的同一个 Rohan。此外,即使使用%c,也需要将地址存储在内存中 -
@SuvP 到
printf()%c你至少需要一个char变量,而不是它的地址。 -
注意,
&arr[0]≡&*(arr+0)≡&*arr≡arr,所以PrintSomeMessage(&arr[0])≡PrintSomeMessage(arr)