malloc用数组做函数的参数只能有一个形参吗?形参一定要整型吗?

int *a[10];
int (*a)[10];
int (*a)(int);
int (*a[10])(int);
样的表达式可以遵循这样的规则:&&
int *a[10];
//指向int类型的指针数组a[10]
int (*a)[10]; //指向有10个int类型数组的指针a
int (*a)(int);//函数指针,指向有一个参数并且返回类型 均为int的函数
int (*a[10])(int); //函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组
一个有趣的网站,可以自动分析声明。
另外,可以安装 sudo apt-get install cdecl
========== 1. 由变量描述到表达式 ==========
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数:
1. 定义一个数组
2. 该数组元素是指针
3. 该指针指向一个函数,
(* a[10]) ()
4. 有一个整形参数
(* a[10]) (int)
5. 并返回一个整形数
int (* a[10]) (int)
另外一个例子:
定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?
&http://www.nowcoder.com/questionTerminal/960fa6fbc2734d&
1. 定义一个函数指针
2. 指向的函数有两个int参数
(*p) (int,int)
3. 返回值是一个函数指针
* (*p) (int,int)
(* (*p) (int,int))
4. 返回的指针指向一个int参数
(* (*p) (int,int))(int)
5. 并返回 int
(* (*p) (int,int))(int)
(* (*p) (int,int))(int)
相似的一个例子
声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是()
&http://www.nowcoder.com/questionTerminal/242d7e95fe37d69884dff8&
1. 声明一个指针
2. 该指针指向一个数组
3. 每个元素是一个函数指针
(*(*p)[10])()
4. 参数是int*
(*(*p)[10])(int*)
5. 返回值是int
int (*(*p)[10])(int*)
========== 2. 由表达式到变量描述 ==========
注意: 指向数组的指针和指针数组
int *a[10]: a是一个数组,该数组的元素是指针,每个指针都指向一个int型
int (*a)[10]:a是一个指针,该指针指向一个数组,数组元素是int
int (*a)[10]: declare
a as pointer to array 10 of int
int *a[10]:declare a
as array 10 of pointer to int
int (*a[10])(int)
1. a是一个数组
2. a这个数组的元素是一个指针
3. 指针是一个函数指针
4. 这个函数参数是int,返回值是int
a是一个包含10个元素的数组,每个元素指向一个参数是int,返回值是int的函数。
declare a as array 10 of pointer to function (int) returning
-----------
int (*(*p)[10])(int*)
1. p是一个指针
2. p这个指针指向一个数组
3. 数组元素是指针
4. 数组元素的指针指向一个函数
5. 这个函数参数是int*,返回值是int
p是一个指向包含10个元素的数组的指针,每个元素是一个函数指针,指向一个参数是int*,返回值是int的函数。
declare p as pointer to array 10 of pointer to function
(pointer to int) returning int
依照题意依次写出即可:
一个有10个指针的数组:*a[10]
该指针指向一个函数:
(*a[10])()
该函数有一个整形参数: (*a[10])(int)
并返回一个整型数:
int (*a[10])(int)
int *a[10];
//指向int类型的指针数组a[10]
int (*a)[10];
//指向有10个int类型的数组的指针a
int (*a)(int);//函数指针,指向有一个参数并且返回类型均为int的函数
int* a(int);//定义一个int参数并且返回类型为int*的函数
int (*a[10])(int); //
函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组
本题选择D选项,考察指针的基本概念
指针数组和数组指针采用中文比较难懂,但是用英文会比较好理解一点,解释如下:
指针数组:array of
pointers,即用于存储指针的数组,也就是数组元素都是指针。如:int* a[4];
数组指针:a pointer to an array,即指向数组的指针。如:int (*a)[4];
因而A选项表示指针数组,即该数组有10个元素,每个元素都是一个指针,且指针指向int类型;
B选项表示数组指针,表示一个指向含有10个int类型元素的数组的指针;
C选项指的是一个函数指针,该函数含有一个int类型的参数,返回值类型也是int型;
D选项指的是题目要求的指针。
int *a[10];
//指向int类型的指针数组a[10]
int (*a)[10]; //指向有10个int类型数组的指针a
int (*a)(int);//函数指针,指向有一个参数并且返回类型 均为int的函数
int (*a[10])(int); //函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组
可以使用排除法! 首先,是有10个指针的数组,所以一定会有[10],排除了C;
然后,该函数有一个整形参数,一定会有(int ), 所以这样只有D符合了;
根据题目 首先最里层应该是一个数组,其次数组的元素又是一个指针,最后每个指针又指向一个函数
根据运算符的顺序就可以知道选择D了
函数指针构成的指针数组
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
京ICP备号-4
扫一扫,把题目装进口袋malloc函数 能有几个形参啊? 形参一定要是整形吗?为什么我些 malloc (0.1) malloc (1,2)程序都不会报错?_百度知道
malloc函数 能有几个形参啊? 形参一定要是整形吗?为什么我些 malloc (0.1) malloc (1,2)程序都不会报错?
老师说malloc函数的形参 只有一个 而且是整形,但是为什么我用 vc写 int * p = (int*) malloc (1 , 2); 或者int * p = (int*) malloc (1.01);程序都不会报错?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
函数的参数其实可以有多种的,可以一个参数,也可以几个参数,可以是string也可以是int型,布尔型.这个叫方法重载,即是一个方法名,可以有多种参数(参数类型)的调用。
这个跟编译器有关,你们老师说的应该是c的编译器,gcc这些,默认的就是只能跟原型一样参数才能调用,所以malloc函数只有一个整形形参在c++里面函数名想听听,形参不同函数构成重载,即有好几种参数列表,看你自己定义或者库函数里面的具体先
过于古老的编译器会不检查实参和形参的类型及数量是否匹配……
为您推荐:
其他类似问题
malloc函数的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。专注于计算机网络安全学习
素数:能被1和本身整数,且不能被2到(本身)的数整除,称为素数。回文数:正与逆排序数字一样的称为回文数。基本数据类型数据:
-- short int
-- long int
单精度浮点数
双精度浮点数
‘A’或“A”单引号表示单字符;
字符串定义与数组基本相同,字符串用双引号括起来“AB”,每个字符以‘\0’隔开。复合类型数据:
结构体:结构体可相互赋值。
定义了一个新数据类型。
定义并初始化:struct ac dl = {0, 0.1,'F'};
//将a、b、c 按顺序赋值。
dla.a = 0;
dla.b = 0.1 ;
dla.c = 'f';
指针定义:struct ac * dlb = &
dlb-&a = 88;
// 等价于(*dlb).a 也等价于dla.a
指针动态结构体定义:struct Students * p = (struct Students *)malloc(sizeof(struct Students));
枚举:把事务一一列出来。
enum weekday
---&定义枚举名:weekday
MonDay, TuesDay
// 从位数0开始,将事务一一列出来,判断时,只能输入枚举内容。
};数组:数组成员称为元素。---int
a[5]={0}; ---& 对5名元素初始化为0。
一维数组:
1. int a[5] = {1,2,3,4,5} 位数从0开始。
2. &a[0] = a = &a
3.int i[5]; printf ("%d",i)
----& 输出的是i[0]的地址,此规则可配合指针使用。
4.a == *(a+i)
-------& 指针篇章。
二维数组:int a[3][4]
------& 定义3行4列。该数组是含有3个元素的一维数组,只不过每个元素都可以再分成4个小元素
a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]
三维数组:int a[3][4][5]; -----& 该数组是含有3个元素的一维数组,只不过每个元素都是4行5列的二维数组。
多维数组:是不存在的,因为内存是线性一维;n维数组可以当做每个元素是n-1维数组的一维数组。进制规范:
八进制前面加0(即零)
十六进制前面加0X或0x
十进制前面什么都不加输出表示
%d表示以整型十进制输出
%ld表示以长整型十进制输出
%x或%X或%#X或%#x表示以十六进制输出
【推荐使用%#X】
%o表示以八进制输出
%f表示以单精度浮点数输出
%lf表示以双精度浮点数输出
%C表示以字符输出
%S表示以字符串输出输入表示
1.非输入控制符必须原样输入加所需输入数据。 例如:scanf ("4%d",&i) 则输入410 ----10所需输入变量
2.编写断续输入应做适当的处理,如下【非重点】
while ((ch=getchar()) !='\n');
//while循环;getchar获取字符
//continue继续;运算符表示方式:
算术运算符: +
关系运算符: &
!=(不等于)
逻辑运算符: !(非)
||(或)(真)(假)
赋值运算符:
//例+=:a+=3 等价于 a=a+3;
++i 等价于 i=i+1;
三目运算符: i = 0&2 ? 5 : 1;
---& if (0&2) {i=5} else {i=1}
位运算符: &
3&5 = 1 按位运算并且
3|5 = 7 按位运算或
按位取反+1
按位异或,相同为零,不同为1
表示把i所有的二进制位左移3位,右边补零。十进制:左移N位相当于乘以2的N次方。
表示把i所有的二进制位右移3位,左边一般补零。十进制:右移N位相当于除以2的N次方。运算符注意事件:
除法运算:两个数都是int,则商是int,被除数和除数中只要有一个或两个都是浮点型数据,则商也是浮点型。
取余运算:取余%运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同。//例如:-13%23==-13;-13%-23=-13
&&运算符:左边的表达式为真,右边表达式肯定不会执行
||运算符:左边的表达式为真,右边表达式肯定不会执行流程控制语句:
if:英文含义“如果”,if默认只能控制一个语句,如果想控制多个语句,就必须把这些语句用{}括起来。
else:英文含义“否则”,else默认只能控制一个语句,如果想控制多个语句,就必须把这些语句用{}括起来。
else if:英文含义“否则-如果”,else if默认只能控制一个语句,如果想控制多个语句,就必须把这些语句用{}括起来。
for(&初始化&; &条件表达式&; &增量&)
for (int i = 0; i & 100; i++)
while(条件表达式) -----&int i=1;
while (i&100) {sum=sum+i; ++i;}
do {语句} while (表达式);
----&do...while...;
先执行语句后判断,称为:判断循环尾。
switch (需要跳到的标号) {case 标号: --执行语句----&(跳出)
default: --&(默认) ---执行语句---&}
break:在多层循环中,break只能终止距离它最近的循环;在多层switch嵌套中,break只能终止距离它最近的switch。 : 继续执行循环条件表达式。函数:
1.函数无返回值写法: void max()
2.函数有返回值写法: int max(void) / void max(int i) {
-----& return 0; }
3.除了main函数外,其它函数名可随意取。
4.函数返回值以函数类型为准。
5.一个程序必须有且只能有一个主函数(main),也是程序的入口和出口。
6.主函数可以调用普通函数,普通函数不能调用主函数;普通函数可相互调用。
7.true 英文含义“真”;false 英文含义“假”。例如:return true ---&返回真。
8.所有函数必须写在main函数前面,除非先对函数申明。
9.函数申明:void f();
//函数申明可不写形参,分号不能丢掉。常用的系统函数:
1. double sqrt(double x);
求X的平方根,double数据类型
2. int abs(int x)
求x的绝对值。
3. double fabs(double x)
------& 求x的绝对值。
4. strcpy(,)
------& 将参数二字符串拷贝到参数一里。两个参数都是字符串类型指针与指针变量:概念:
1. 指针:指针就是地址,地址就是指针,地址就是内存单元的编号。
2. 指针变量:存放地址的变量称为指针变量。
3. 指针与指针变量:变量的地址就是指针,存放指针的变量就是指针变量。
4. 指针变量不能相加,不能相乘,也不能相除。
5. 两个指针变量指向同一个A数组不同的A数组元素,可进行相减。
6. 不管什么类型,指针变量只占4个字节。
7. 多级指针执行结果:
int * a = &q; *a =
int ** b = &a; *b = **b = *a =
int *** c = &b; *c = &a; **c = ***c = *a =语法:
1. 定义指针变量:变量类型 * 变量名
2. 取普通变量地址: int * i
//是把p的地址放在i中
3. 指针变量与普通变量相等: p = *i
//将i地址中的内容存放在p中。动态内存:malloc:
* p = (int *)malloc(4)
1. 要使用malloc函数,必须添加malloc.h这个头文件
2. malloc函数只有一个形参,并且形参是整型
3. 4表示请求系统为本程序分配4个字节
4. malloc函数只能返回第一个字节的地址
5. 分配了8个字节, p变量占4个字节, p所指向的内存也占4个字节
6. p本身所占的内存是静态分配的, p所指向的内存是动态分配的
free():含义---&释放动态内存。freep(p)表示把p所指向的内存给释放掉。p本身的内存是静态的,不能由程序员手动释放。补码:不够位数按数据类型进行补位
1个字节=8位。
假如int类型,4*8=32位正整数的二进制:除2取余,直至商为零,余数倒叙排序。负整数的二进制:先求该负数相对应正整数的二进制代码,然后将所有位取反,末尾加1,不够位数时,左边补1。负整数二进制求十进制:如果首位是1,则表明是负整数。将所有位取反,末尾加+1,所得的数值就是该负数的绝对值。
注意:若正整数超出所规定字节范围,则当作负数处理。
例如: 128 ----&
----& 当1个字节处理:正负结果一样,符号位为1,所以是-128。如果是两个字节,则不够位数补1,则结果不同。二进制全部为零含义
--0000的含义
2. 字符串结束标记符‘\0’
3. 空指针NULL:NULL本质也是零,而这个零不代表数字零,而表示的是内存单元的编号零。
4. 计算机规定了,以零为编号的存储单元的内容不可读,不可写。常见与用法问题:
1. if...else if... 同时成立,则只输出if。
2. if...语法正确;
3. float和double都不能保证可以精确的存储一个小数(也就是误差),所以循环更新的变量不能定义成浮点数。(例如:float
i = 0 ; if(0 == i) i不可能精确到0.0000)
4. 所有判断语句返回值只有2个1或1,例如:if ( 3 % 2 == 1),余数不为0,则逻辑值为1
5. 自增与自减:前自增整体表达式的值加1之后的值;m = ++j
---& 执行步骤:
j = j + 1 ---& m =
后自增整体表达式的值加1之前的值;k = i++
执行步骤: k = i ---& i = i + 1;
6. “,”逗号: i = (3,2,5,6);
括号里面从左到右执行,最后i=6;如果去掉括号,则i=3
7. 一维数组:a[5]= {1,2,3,4,5} 是错误的,只有在定义数组的同时才可以整体赋值。
8. 在C语言中,所有数组成员位数都是从0开始的。
9. 返回函数值return 0;,且终止被调函数。10. 全局变量与局部变量命名相同时,局部变量会屏蔽全局变量。11. 科学计数法
------& 3.2e3=*10^3
\\ e表示10,后面数为几次方,例如10的3次方。12. 强制转换:(数据类型)(变量);
13. sizeof();
用法:sizeo(数据类型或变量名);返回的是所占字节。
没有更多推荐了,在有些函数参数传递的过程中,有时形参为什么要用指针的指针?
[问题点数:20分,结帖人baiyizhujian]
本版专家分:107
结帖率 100%
CSDN今日推荐
本版专家分:7557
本版专家分:107
本版专家分:7557
本版专家分:54
本版专家分:107
本版专家分:2924
本版专家分:41
本版专家分:424
本版专家分:12
本版专家分:0
本版专家分:421
本版专家分:168
本版专家分:1065
本版专家分:158
本版专家分:107
本版专家分:168
本版专家分:107
本版专家分:1065
本版专家分:136
本版专家分:221
本版专家分:34
本版专家分:2
本版专家分:107
本版专家分:243
本版专家分:556
本版专家分:0
本版专家分:18
本版专家分:0
本版专家分:833
本版专家分:90
本版专家分:6102
本版专家分:15
本版专家分:35
本版专家分:13
本版专家分:11
匿名用户不能发表回复!|
其他相关推荐> 问题详情
在C语言的函数中()A.必须有形参B.形参必须是变量名C.可以有电可以没有形参D.数组名不参与形参
悬赏:0&答案豆
提问人:匿名网友
发布时间:
在C语言的函数中()A.必须有形参B.形参必须是变量名C.可以有电可以没有形参D.数组名不参与形参请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
您可能感兴趣的试题
1若有如下程序:&&sub(int * t,int n)&&{int&*p1, *p2;&&for(p1=t,p2=t;p1-t<n;p1++)&&if(*p1<*p2)&p2=p1;&&return(*p2);}&&main()&&{int a[9]={9,36,19,39,26,5,6,33,15};&&printf("%d\n",sub(a,9));}&&则程序运行后的输出结果是(&&)A.5B.9C.15D.392在表示C语言的整型变量时,表示“无符号整型”的符号是(&&)A.unsigned intB.unsigned shortC.long intD.unsigned long3以下程序段给数组所有的元素输入数据,请选择正确答案填入。(&&)&&#inelude<stdio.h>&&main()&&{int a[10],i=0;&&&while(i<10)scanf("%d",______);&&&&┇&&}A.a+(i++)B.&a[i+1]C.a+iD.&a[i++]4若输入60和13,以下程序的输出结果为(&&)&&#define&SURPLUS(a,b)&((a) %(b) )&&main()&&{ int a,b;&&&scanf("%d,%d",&a,&b);&&&prind("\n",SURPLUS(a,b) );&&}A.60B.13C.73D.8
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
每天只需0.4元
选择支付方式
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
恭喜你被选中为
扫一扫-免费查看答案!
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
提示:请截图保存您的账号信息,以方便日后登录使用。
常用邮箱:
用于找回密码
确认密码:

我要回帖

更多关于 冒泡排序法 的文章

 

随机推荐