首页 > 试题广场 >

若有 int *p=(int *)malloc(sizeof

[单选题]
若有代码段
int *p = (int *)malloc(sizeof(int));
则向内存申请到的内存空间中存入整数123的语句为( )
  • scanf("%d", p);
  • scanf("%d", &p);
  • scanf("%d", *p);
  • scanf("%d", **p);
p 是 int 的指针类型,scanf 要求 %d 相应参数也是 int 的指针类型,所以直接
scanf("%d",p);
即可。

B 项, &p 又取了一次 p 的地址,相当于指针的指针, scanf 尝试写入原本是指针的地址,导致 p 的值被改变(本应写入 p 指向的内存),后续解引用 *p 可能导致访问非法内存 产生运行时读内存错误。
C 项, *p 解引用取值,是一个未初始化的乱值, scanf 会把该值当作地址,可能导致运行时写内存错误或写入不被期望的内存区域。
D 项, p 只是一次指针, **p 会编译错误。
编辑于 2017-09-15 09:38:59 回复(0)
malloc:如果分配成功则返回指向被分配内存的指针,而p就是指向这一段内存的;
然后看一下scanf其调用格式为:      scanf("<格式化字符串>",<地址表>);第二个参数是地址表,也就是指向内存地址的p,所以选A
发表于 2017-09-15 09:18:34 回复(0)
scanf("%d",&*p)=scanf("%d",p)
发表于 2017-09-15 14:57:52 回复(0)
这里的p已经是地址了,所以不用取地址符号&
编辑于 2023-12-23 10:07:46 回复(0)
指针p指向分配的内存地址,可以用p访问这段内存空间,不用&p
发表于 2023-02-15 18:02:34 回复(0)
我还以为是printf呢。。。。
发表于 2019-11-21 17:32:23 回复(1)
麻了***了
发表于 2023-05-18 13:43:39 回复(0)
注意p已经是地址了
发表于 2022-04-04 12:35:15 回复(0)

p是一个指向整形内存空间的指针,scanf参数为变量指针

发表于 2020-03-27 16:42:45 回复(0)