不需要睡觉o 2024-05-21 20:51 采纳率: 94.7%
浏览 0
已结题

对c语言指针的书写规范掌握的不好


#include<stdio.h>
int main(){
int *p;
int m=1;
p=&m;
printf("%d",*p);
return 0;
}

为什么这样写是正确的

#include<stdio.h>
int main(){
int *p;
int m=1;
*p=&m;
printf("%d",*p);
return 0;
}

就是不对的了

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-21 20:51
    关注

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

    在C语言中,指针用于存储变量的地址。当你声明一个指针时,你需要指定它的数据类型,以便知道它将要存储哪种类型的变量的地址。例如,在下面的代码中,int *p 声明了一个指向整型变量的指针。

    #include<stdio.h>
    int main(){
        int *p; // 声明一个指向整型变量的指针
        int m = 1; // 定义一个整型变量并赋值为1
        p = &m; // 将变量m的地址赋给指针p
        printf("%d", *p); // 输出指针p所指向的变量m的值
        return 0;
    }
    

    在这段代码中,首先声明了一个名为p的指针,然后定义了一个整数变量m并将其值设为1。接下来,通过p = &m;这行代码,我们将变量m的地址赋给了指针p。最后,我们通过*p访问指针p所指向的内存位置(即变量m的值),并将其打印出来。

    然而,如果你尝试像这样操作:

    #include<stdio.h>
    int main(){
        int *p;
        int m = 1;
        *p = &m; // 错误:试图让指针p的值等于m的地址,而不是将m的地址赋给p
        printf("%d", *p);
        return 0;
    }
    

    这段代码中的问题是,你在第二行声明了一个指针p但没有初始化,也就是说,此时p的值是未定义的。接着,在第三行,你试图将m的地址赋给*p,也就是指针p所指向的位置,而不是将m的地址赋给p本身。这会导致程序行为不确定,因为p可能还没有被正确地初始化,所以可能会读取到无效内存区域,进而导致错误或崩溃。

    因此,正确的做法是先将m的地址赋给p,再通过*p访问m的值。

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

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 5月21日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表