C ptr、*ptr和&;之间的差异;ptr

C ptr、*ptr和&;之间的差异;ptr,c,pointers,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 有问题吗 “&ptr=0029FF14”是存储“*ptr=10”的内存位置吗 “ptr=0001869F”是存储“&ptr

我最近一直在研究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
有问题吗

  • “&ptr=0029FF14”是存储“*ptr=10”的内存位置吗
  • “ptr=0001869F”是存储“&ptr=0029FF14”的内存位置吗?如果不是,那么什么是ptr
  • 谢谢大家!

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

    • ptr
      是指针本身
    • *ptr
      是它所指向的值
    • &ptr
      是指针的地址
    那么看

  • &a
    是存储
    a
    的内存位置

  • a
    是存储
    *a
    的内存位置


  • 让我们解决一些问题:

    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
    

    为什么你认为选择一个随机的内存位置会有效?aka该行
    *ptr=10该代码不提供这些输出,事实上也不编译。@EdHeal这一行不是问题所在<代码>int*ptr=(*int)99999是。@glglglgl-我不同意。海报可以将其设置为任何值,只要海报不使用它!此代码中未定义
    a