首页 > 解决方案 > 为什么字符串不返回其内存位置?

问题描述

他们说字符串自然是一个字符数组,表示其第一个字符的内存位置:string == &string[0]。这就是为什么当用户希望程序将数据读入该变量时,他不必在字符串变量之前指定 & 符号:

scanf("%s", string);

但是有一个合理的问题:为什么我们在打印字符串时看不到字符串的内存位置?

printf("%s", string);

标签: cscanfmemory-address

解决方案


但是有一个合理的问题:为什么我们在打印字符串时看不到 &string[0] ?

printf("%s", string);

我假设您的意思是您希望看到打印的地址而不是内容。

这就是格式说明符的用途。您将第一个字符的地址传递给printf并且因为该参数有一个%s格式说明符,所以该函数知道它必须获取地址,取消引用它并打印任何字符,直到0在内存中找到 a 。

如果您提供了%p格式说明符,您将看到打印的地址。在这种情况下,您需要将地址转换void*为完全符合标准。


推荐阅读