【问题标题】:Why char pointer could add value after it signed? [closed]为什么char指针在签名后可以增值? [关闭]
【发布时间】:2020-01-16 23:14:18
【问题描述】:

输出是 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? 谢谢

【问题讨论】:

  • 不要使用图像来显示您的代码,使用代码块将其复制粘贴到此处。见How to Ask
  • @MickaelB。该页面上的哪里回答了问题?

标签: c pointers


【解决方案1】:

TL;DR

*p 等于 c

说明

您好,首先看看如何格式化堆栈溢出问题。您应该直接在问题中编写代码。

所以你的问题是关于对这些行的理解:

    char c,*p;
    p = &c
    *p = 'Z'
    printf("%c", c) // 'Z'

首先你要声明两种不同类型的变量:

  • char c;一个char可以在内存中存储1个字节
  • char *p; char 的指针。一个指针保存一个内存地址。在这种情况下,一个字符的内存地址

然后通过执行p = &c,您将c 的内存地址存储在指针p 中。

&c表示c的内存地址。

*p表示p中存储的内存地址的值

最后,通过*p = 'Z',您将存储在 p 中的内存地址的值设置为“Z”。并且因为 p 存储了 c 的内存地址,所以 c 被设置为 'Z'。

如果您对此仍然没有信心,请对指针进行一些研究。

【讨论】:

  • 我还需要格式化我的代码吗?我发了一张照片,一开始就删了。我使用 ctrl+k 来包含我的代码。对吗?
  • 您的问题重新格式化很好。这正是您格式化stackoverflow问题的方式。只是标题不好。
  • 大声谢谢。我会改的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
  • 2021-06-03
  • 1970-01-01
  • 2020-06-05
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
相关资源
最近更新 更多