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日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。