c - 为什么char指针签名后可以增值?

标签 c pointers

输出是 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/

相关文章:

c - 在 C 中传递二维数组

c++ - 双指针有必要吗?

c++ - C++ 结构中私有(private)和 protected 可用性

c - 我想了解 '__attribute__((space(dma)));'的语法

我无法理解预处理宏

在 C 中修改信号处理程序中的值时出现混淆

C - 从字节数组的一部分获取字符

c++ - C++ 中的向上转型和向下转型

c - 指针、列表和空值

C-在执行过程中检查特定的内存地址