【发布时间】:2020-08-20 18:54:39
【问题描述】:
我注意到char* 在 C 中的工作方式与所有其他指针在 C 中的工作方式之间存在一些差异。例如,其中一个差异是:
当打印出 char 指针本身时,它会返回它的值,直到它被终止:
代码:
char* var = "Hello World";
printf("%s", var);
输出:
Hello World
但是当对其他指针执行相同操作时,它会返回存储在其中的值的地址,如下所示: 代码:
int var = 5;
int* pVar = &var;
printf("%d", pVar);
输出
//Random memory address
我还注意到,您不能像这样直接声明不是char* 的指针:
int* var = 5;
有人可以列出这些指针之间的所有差异以及为什么存在这些差异吗?谢谢
【问题讨论】:
-
简单地说,您的第一个示例指向一个字符数组,该数组在一串字符的末尾有一个 \0 字符。
printf(%s",var)正在寻找该 \0 字符以知道何时停止。其他指针打印它只是假设一个指针大小。 -
“当打印出 char 指针本身时” - 除非您打印的不是指针本身,而是它所指向的字符串。
-
指针,是指针,是指针——但是type控制指针算法!也许有帮助Pointer Basics
-
@DavidC.Rankin:大部分是真的,但不是完全。指针别名规则实际上以一些奇怪的方式处理特殊情况
char*。 -
是的,你是对的,C11 Standard - §6.5 Expressions (p6,7)(称为严格别名规则)。该规则有例外。一个例外(最后一点)是可以通过
char类型的指针访问任何值。