【问题标题】:Unexpected output when printing the value of a variable using a pointer使用指针打印变量的值时出现意外输出
【发布时间】:2015-09-13 08:12:27
【问题描述】:
#include <stdio.h>
int main()
{
    int i = 5;
    int* u = &i;
    printf("%d\n", *(u + 0));
    for(i = 0; i < 10; i++)
        printf("%d\n", *u);
}

输出是:

5
0
1
2
3
4
5
6
7
8
9

但我认为它应该打印5 11 次。

【问题讨论】:

  • i 的值在此处更改 for(i=0;i&lt;10;i++)
  • u 指向i,而i 是您的循环变量,因此您只需在循环中打印i 的每个连续值。
  • @FelixPalmen 不,应该关闭这个问题。
  • @FelixPalmen 绝对是; Stack Overflow 不是语言教程网站。预计不会在这里教授基本的语言功能(有谷歌,还有那些收取昂贵学费的大学!)。这个问题也很适合几个默认关闭原因;例如,“问题无法重现”(顺便说一句,我选择了它)。由于没有问题或意外行为,因此无需重现或询问。
  • @FelixPalmen 事实上,大约 80% 的关于 SO 的问题可能很容易通过 RTFM 或仅通过应用常识来回答,实际上应该在 IMO 中关闭。

标签: c pointers


【解决方案1】:

由于 u 包含变量 i 的地址,因此对 i 的任何更改都将反映在 *u 的值中。所以通过代码:

#include <stdio.h>
int main()
{
    int i = 5;
    int* u = &i;    //u contains the address of i so change in i changes *u
    printf("%d\n", *(u + 0));    //prints the value of i as *u is the value i that is 5
    for(i = 0; i < 10; i++)    //the value of i changes so does *u.Therefore *u is incremented from 0 to 9 1 at a time.
    printf("%d\n", *u);     //prints the value of *u whch is effectively i
 }

【讨论】:

  • nitpick:不是u的值中,而是*u的值中 ..u 将保持不变,即只是i 的地址。还建议在文本中为变量名使用反引号以提高可读性。
  • 当我说 u 的值时,我指的是 *u。
  • 嗯,u的值仍然是i的地址。最好是 -- 超级精确 这里,因为显然 OP 到目前为止还没有完全理解指针。
  • 请将最后一条评论更改为“打印 u 指向的值:i”,因为 u 的值类似于 0x777ff....
猜你喜欢
  • 2020-07-27
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2020-09-22
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
相关资源
最近更新 更多