输出是 A A Z。我无法理解最后一个输出“Z”。
int main(){
char a,b,c,*p;
a = 'A';
p = &a;
b = *p;
p = &c;
*p = 'Z';
printf("%c %c %c\n",a,b,c);
return(0);
}
为什么*p = 'Z';
可以在 p = &c
之后将字母“Z”签名为 c ?
谢谢
最佳答案
TL;DR
*p
等于 c
说明
嗨,首先看一下如何格式化堆栈溢出问题。您应该直接在问题中编写代码。
所以你的问题是关于这些行的理解:
char c,*p;
p = &c
*p = 'Z'
printf("%c", c) // 'Z'
首先,您声明两种不同类型的变量:
char c;
一个char可以在内存中存储1个字节char *p;
char 的指针。指针保存着内存地址。在本例中是 char 的内存地址
然后通过执行p = &c
,您将c
的内存地址存储在指针p
中。
&c
means the memory address of c.
*p
means the value of the memory address stored in p
最后,通过执行*p = 'Z'
,您将 p 中存储的内存地址处的值设置为“Z”。并且因为p存储了c的内存地址,所以c被设置为'Z'。
如果您对此仍然没有信心,请对指针进行一些研究。
关于c - 为什么char指针签名后可以增值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779192/