ptr,* ptr和& ptr之间的差异

时间:2016-03-11 21:18:29

标签: c pointers

我最近一直在研究C中的指针,我似乎无法完全理解这段代码:

int *ptr= (*int) 99999;
*ptr = 10;
printf("%d\n,*ptr);  //Outputs: 10
printf("%p\n",&ptr); //Outputs: 0029FF14
printf("%p\n",ptr);  //Outputs: 0001869F

有问题吗?

  1. “& ptr = 0029FF14”是存储“* ptr = 10”的存储位置吗?
  2. “ptr = 0001869F”是存储“& ptr = 0029FF14”的存储位置吗?如果不是那么什么是ptr?
  3. 谢谢!

    我相信这个问题与“C指针语法”帖子不同,因为它没有区分ptr,* ptr和& ptr,这意味着帖子没有解释为什么“ptr”包含不同的值取决于操作员它附带。 [EDITED]

2 个答案:

答案 0 :(得分:2)

  • ptr是指针本身。
  • *ptr是它指向的值。
  • &ptr是指针的地址。

所以我,

  1. &a是存储a的内存位置。

  2. a是存储*a的内存位置。

答案 1 :(得分:2)

让我们解决一些问题:

int *ptr= (*int) 99999;
*ptr = 10;

除非你知道自己在做什么(你正在玩杂耍链锯),否则永远不要那样做。

相反,让我们制作一个真正的int并使用它。

int test_int = 10;
int *ptr = &test_int;
printf("%d\n",*ptr);      //Outputs: 10
printf("%d\n",test_int);  //Outputs: 10 too
printf("%p\n",&ptr);      //Outputs: the location of ptr - its address
printf("%p\n",ptr);       //Outputs: the location of test_int
printf("%p\n",&test_int); //Outputs: the location of test_int too