CFXLWT 2022-02-06 22:21 采纳率: 81.5%
浏览 92
已结题

C语言学习笔记:scanf与指针的问题


int main(int argc, char* argv[])
{
    int* p2;
    p2 = (int*)malloc(sizeof(int));
    scanf("%d", p2);//5
    printf("%d\n", *p2);//5
    int* p3;
    int i = 5;
    p3 = &i;
    printf("i=%d,p3=%d\n", i, *p3);
    printf("i的地址=%p   p3的地址=%p", i, p3);
} 

**问题1:为什么不分配动态内存就不能用scanf给p2赋值,明明p2就是个指针变量,用scanf给他一个值的地址这样的理解是不是出错了?还是我对scanf的理解有问题,如果可以还请麻烦你详细解释一下
问题2: p3=&i,的意思是是将i的变量地址给p3吗?如果是,为什么两个地址输出的不一样,如果不是,请问这段p3=&i是什么意思?
**

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-02-06 23:09
    关注

    问题1:p2是个指针变量,是用来存放地址值的一个变量,只有4个字节的空间。
    用scanf()输入的时候,如果没用malloc()分配一个空间地址给它,它里面就
    是一个随机值,对这个随机值的操作就是非法的。
    p2 = (int*)malloc(sizeof(int));这句与:p3 = &i; 一个意思,就是将
    一个变量的地址值存入 p2 或 p3 里,也就是让指针 p2 p3 指向两个变量。
    问题2:把 printf("i的地址=%p p3的地址=%p", i, p3);修改为:
    printf("i的地址=%p p3里的值=%p p3自身的地址=%p", &i, p3, &p3);看看。

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

报告相同问题?

问题事件

  • 系统已结题 2月16日
  • 已采纳回答 2月8日
  • 创建了问题 2月6日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度