打印一个字符指针......会发生什么?

Beh*_*s58 5 c string pointers char

我是 C 的新手,我有一个关于字符指针和它将打印什么的问题。看一看 :

int main()
{
char *p1="ABCD";
p1="EFG";
printf ("%s",p1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

它会打印 EFG

现在 :

int main()
{
char *p1="ABCD";
//p1="EFG";
printf ("%s",p1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

它会给你 ABCD

我不明白的一点是究竟*p1是什么?
它是一个包含char值的地址吗?是char吗?
现在是什么*p1?为什么const

Sou*_*osh 1

p1是一个char指针,它保存使用运算符分配给它的字符串的基地址起始地址或第一个元素的地址 =

在您的第一个代码中,您已为其分配了“ABCD”的基地址,随后分配了“EFG”的基地址[覆盖了以前的值],最后打印了它。因此,将打印最新值 ["EFG"]。

在第二种情况下,您分配“ABCD”的基地址并打印它。所以它打印了ABCD. 也许值得一提的是,%s中的格式说明符printf()期望空终止字符串的起始地址,在这里由 指向p1

根据该const部分,在这种情况下,所指向的字符串是恒定的,因为字符串文字通常存储在只读内存位置中。意味着不允许更改值。然而,该指针不是,因此可以正确地将其重新分配给新值。p1p[1] = 's'p1constp1="EFG";