【牛客 题库】 malloc 函数和 scanf函数

来源:互联网 发布:mac屏幕共享连接失败 编辑:程序博客网 时间:2024/05/12 10:34

1.若有 int *p=(int *)malloc(sizeof(int));则向内存申请到内存空间存入整数123的语句为()。

scanf("%d",p);
scanf("%d",&p);
scanf("%d",*p);
scanf("%d",**p);
解答;A

首先看一下malloc函数:

一、原型:extern void *malloc(unsigned int num_bytes);

头文件:#include <malloc.h> 

功能:分配长度为num_bytes字节的内存块

说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。

当内存不再使用时,应使用free()函数将内存块释放。


这里要注意malloc的返回值:void*类型,也就是说可以是任何类型的指针,所以要强制转换一下,不然编译会出错。

返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。看下面代码:

#include <iostream>#include <stdio.h>#include <malloc.h>using namespace std;int main(){//第一种形式char *p;p = (char *)malloc(100);//第二种形式,是等价的char *q = (char *)malloc(sizeof(char));if (p)printf("Memory Allocated at: %x/n", p);elseprintf("Not Enough Memory!/n");free(p);free(q);return 0;}


然后看一下,scanf函数:

scanf()函数是格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。

其调用格式为:      scanf("<格式化字符串>",<地址表>);


注意:scanf的第二个参数是<地址表>,所以应该是一个地址,看下面代码:

int main(){int a, b, c;scanf("%d%d%d", &a, &b, &c);//输入的时候,不同变量之间要有空格printf("%d,%d,%d/n", a, b, c);scanf("%d", &a);printf("%d", a);return 0;}

要注意的是:

(1)&a、&b、&c中的&是地址运算符,分别获得这三个变量的内存地址。
(2) "%d%d%d"是按十进值格式输入三个数值。输入时,在两个数据之间可以用一个或多个空格、tab键、回车键分隔。

sacnf()中的变量必须使用地址。
int a, b;
scanf("%d%d",a,b); //错误
scanf("%d%d",&a,&b);


原创粉丝点击