不需要睡觉o 2024-06-04 18:04 采纳率: 94.7%
浏览 2
已结题

为什么此时是将m得地址赋值给*p 也就是指针变量p所指向的位置而不是p本身呀

为什么此时是将m得地址赋值给*p 也就是指针变量p所指向的位置而不是p本身呀

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-04 18:04
    关注

    引自免费微信小程序:皆我百晓生

    在C语言中,指针是一种特殊的变量,它存储的是其他变量的内存地址。当你声明一个指针变量时,比如int *p;,你创建了一个可以存储整型变量地址的空间。然而,这个指针变量本身并没有自动初始化为任何特定的地址。

    当你说“将m的地址赋给*p”,实际上是在说把整数变量m的内存地址赋值给指针变量p所指向的地方(即*p)。这是通过解引用操作符*实现的,*p表示指针p所指向的内存位置。所以当你写*p = &m;时,你实际上是将m的地址存入了p所指向的那个内存位置,使得指针p现在能通过这个地址找到变量m

    如果你想要将m的地址赋给指针变量p本身,你应该直接写p = &m;。这样,p就存储了m的地址,而不是某个其他位置的地址。初始版本中的代码之所以说是错误的,是因为在执行*p = &m;之前,指针p没有被正确初始化,它可能含有垃圾值,这时尝试通过p去访问内存可能会导致未定义的行为,包括数据损坏、程序崩溃或者产生不可预测的结果。

    下面是修正后的代码示例:

    #include <stdio.h>
    
    int main() {
        int m = 1;
        int *p;
    
        // 正确的做法:先初始化指针,然后赋值
        p = &m; 
    
        printf("Value of m: %d\n", m);
        printf("Address of m: %p\n", &m);
        printf("Value at the address pointed by p: %d\n", *p);
    
        return 0;
    }
    

    在这个例子中,我们首先初始化指针p使其指向m的地址,然后输出m的值、m的地址以及通过p访问到的值,可以看到它们是一致的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 已采纳回答 6月4日
  • 创建了问题 6月4日

悬赏问题

  • ¥20 python忆阻器数字识别
  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真