【发布时间】:2018-12-20 22:13:41
【问题描述】:
我是 C 语言的新手,我对指针越来越熟悉。所以,我不明白我们如何通过指针获取 WHOLE 字符串。 如果指针只包含字符串中第一个字符的地址,它如何返回整个字符串?
假设我们有这样的东西char *s = "Test";
因为它只是一个字符数组,所以它位于内存中的某个位置,如下所示:
字符串:T e s t \0
地址:100 101 102 103 104
所以,如果我猜对了,*s 将持有 100(第一个字符 T 的地址)。
那么为什么当我们执行printf(s); 时,我们会在输出中得到整个字符串Test?
它会扫描地址直到遇到\0,还是做其他事情?
【问题讨论】:
-
"它会扫描地址直到遇到 \0 还是什么?" Yes.
-
尽管这看起来不是一个很好的问题,但它展示了我希望每个 C 初学者都遵循的思考过程......
-
值得+1的问题,我非常同意尤金的观点。
-
看起来您已经克服了初学者普遍存在的误解。
char *指向单个字符,而不是字符串。然后可以找到字符串的其他字符,因为我们知道字符串中的字符占用连续的内存位置。 -
@M.M 我只是对打印指针感到困惑。现在我认为它的工作原理是这样的(如果我错了,请纠正):
char *s = "Test"; printf(s);printf 内部大约发生了什么:while(*s!= '\0') {printf("%c", *s); s++;}