C语言题目,补全被调vs 函数自动补全。 int f(int *p,int n);是什么意思?

C语言初级练习_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言初级练习
&&适合C语言初级练习者
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩17页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢以下试题来自:
单项选择题以下程序运行后的输出结果是
#include<stdio.h>
int f(int n);
{ int a=3,
 s=f(a); s=s+f(a); printf("%d\n", s);
int f(int n)
{ static int a=1;
}A.7B.8C.9D.10
为您推荐的考试题库
你可能感兴趣的试题
1A.循环队列B.带链队列C.二叉树D.带链栈2A.定义语句出错,case是关键字,不能用作用户自定义标识符B.定义语句出错,printF不能用作用户自定义标识符C.定义语句无错,scanf不能作为输入函数使用D.定义语句无错,printf不能输出case的值3A.循环队列B.栈C.队列D.二叉树4A.0B.3C.4D.55A.9,One * WorldB.9,One * DreamC.10,One * Dream!D.10,One * World
热门相关试卷
最新相关试卷以下试题来自:
填空题有以下程序:
#include <stdio.h>
int *f(int*p,int*q);
int m=1,n=2, *r=&m;
r=f(r,&n);printf("%d\n",*r);
int *f(int *p,int *q)
return(*p>*q)p:q;
程序运行后的输出结果是______。 2
为您推荐的考试题库
你可能感兴趣的试题
1.填空题 32.填空题 数据操作语言3.填空题 m=111n=222p=3334.填空题 (a+b>c)&&(a+c>b)&&(b+c>a)5.填空题 9
热门相关试卷
最新相关试卷1. extern在函数声明中是什么意思?
它可以用作一种格式上的提示表明函数的定义可能在另一个源文件中,但在
extern int f(); 和 int f(); 之间并没有实质的区别。
补充:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。也就是说extern有两个作用:
一,当它与"C"一起连用时,如: extern "C" void fun(int a, int
b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目
全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为
C++支持函数的重载;
第二,当extern不与"C"在一起修饰变量 或函数时,如在头文件中: extern int
g_I&它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用,记住它是一个声明不是定义!也就是
说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可,在编译阶段,模块B虽然找不到该函数或变量,
但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数。
2. 怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组?
这个问题至少有以下3种答案:
(1)char *(*(*a[N])())();
(2)用typedef逐步完成声明:
typedef char *
/* 字符指针 */
typedef pc fpc();
/* 返回字符指针的函数 */
typedef fpc *
/* 上面函数的指针 */
typedef pfpc fpfpc();
/* 返回函数指针的函数 */
typedef fpfpc *
/* 上面函数的指针 */
pfpfpc a[N];
/* 上面指针的数组 */
(3)使用cdecl程序,它可以把英文翻译成C或者把C翻译成英文:
通过类型转换,cdecl也可以用于解释复杂的声明,指出参数应该进入哪一对括号(如同在上述的复杂函数定义中)。
补充:cdecl程序非常有用,它可以在C语言的声明和英语之间进行转换。它可以解释一个现存的C语言声明,cdecl 程序可以帮助你分析复杂的声明。
这里有一个在线的cdecl:
3. 为什么struct x { ... }; 不对?
C不是C++。结构标签不能自动生成类型。
补充:也就是在C++中这样是对的。在C中不想用struct只能借助于typedef。
4. NULL可以确保是0,但空指针(null)却不一定。
5. 数组和指针的区别是什么?
数组自动分配空间,但是不能重分配或改变大小。指针必须明确赋值以指向分配的空间(可能使用malloc),但是可以随意重新赋值(即指向不同的对象),同时除了表示一个内存块的基址之外,还有许多其它的用途。
由于数组和指针所谓的等价性,数组和指针经常看起来可以互换,而事实上指向malloc分配的内存块的指针通常被看作一个真正的数组(也可以用[]引用)。但是,要小心sizeof。
6. 当我向一个接受指针的指针的函数传入二维数组的时候,编译器报错了。
数组蜕化为指针的规则不能递归应用。数组的数组(即二维数组)蜕化为数组的指针,而不是指针的指针。数组指针常常令人困惑,需要小心对待:
如果你向函数传递二维数组:
int array[NROWS][NCOLUMNS];
那么函数的声明必须匹配:
void f(int a[][NCOLUMNS]){ ... }
void f(int (*ap)[NCOLUMNS]){ ... } &/* ap是个数组指针 */
在第一个声明中,编译器进行了通常的从&数组的数组&到&数组的指针&的隐式转换;第二种形式中的指针定义显而易见。
因为被调函数并不为数组分配地址,所以它并不需要知道总的大小,所以行数NROWS可以省略。但数组的宽度依然重要,所以列维度NCOLUMNS(对于三维或多维数组,相关的维度)必须保留。
如果一个函数已经定义为接受指针的指针,那么几乎可以肯定直接向它传入二维数组毫无意义。
7. 为什么这段代码不行?
gets(str);
printf("%s\n", str);
str没有指向任何合法的位置,换言之,我们不知道指针str指向何处。因为局部变量没有初始化,通常包含垃圾信息,所以甚至都不能保证str是一个合法的指针。
改正方法:用局部变量或用malloc()分配str缓冲区。
8. 我刚才试了这样的代码char *p; strcpy(p, "abc"); 而它运行正常?怎么回事?为什么它没有崩溃?
未初始化的指针p所指向的随机地址恰好对你来说是可写的,而且显然也没有用于什么关键的数据。
char *p; 编译器只分配了足够容纳指针本身的内存; 也就是说,这种情况下,你分配了sizeo(char*)个字节的内存。但你还没有分配任何让指针指向的内存,因此此时p所指向的内存可能是垃圾信息也可能是可写的区域,没有崩溃说明是后者。
9. 下面关于itoa的实现为什么是错误的?如何改正?
char *itoa(int n)
char retbuf[20];
sprintf(retbuf, "%d", n);
这样在编译的时候会出现这样的警告信息&warning C4172: returning address of local variable or temporary&,说明retbuf的地址是临时变量,是暂时的,函数返回时就没有了也就是不能直接返回。
一种解决方案是把返回缓冲区声明为静态变量:
static char retbuf[20];
总结:若要返回字符串或其它集合,则返回指针必须是静态分配的缓冲区,或者调用者传入的缓冲区,或者用malloc()获得的内存,但不能是局部(自动)数组。
10. 为什么在调用free()之后指针没有变空?使用(赋值,比较)释放之后的指针有多么不安全?
当你调用free()的时候,传入指针指向的内存被释放,但调用函数的指针值可能保持不变,因为C的按值传参语义意味着被调函数永远不会改变参数的值。严格的说,被释放的指针值是无效的,对它的任何使用,即使没有解参照,也可能带来问题,尽管作为一种实现质量的表现,多数实现都不会对无伤大雅的无效指针使用产生例外。
补充:free()过后的指针也叫做&野指针&,建议free()过后立即将指针置为NULL,详细原因请看&?&。
11. calloc()和malloc()有什么区别?利用calloc的零填充功能安全吗?free()可以释放calloc()分配的内存吗,还是需要一个cfree()?
calloc(m, n)本质上等价于:
p = malloc(m * n);
memset(p, 0, m * n);
填充的全是零,因此不能确保生成有用的空指针值或浮点零值,free()可以安全的用来释放calloc()分配的内存。
12. 在C中,sizeof('a')=4而不是1,因为C语言中的字符常数是int型,因此sizeof('a')是sizeof(int),这是与C++不同的地方。
13. C语言中没有提高标准的布尔类型,需要用#define或枚举常数定义true/false。
14. 我试图用ANSI&字符串化&预处理操作符#向信息中插入符号常量的值,但它字符串化的总是宏的名字而不是它的值。
你可以用下面这样的两步方法迫使宏既字符串化又扩展:
#define Str(x) #x
#define Xstr(x) Str(x)
#define OP plus
char *opname = Xstr(OP);
这段代码把opname置为&plus&而不是&OP&。
总结:在使用符号粘接操作符##连接两个宏的值(而不是名字)时也要采用同样的&迂回战术&。
15. memcpy()和memmove()有什么区别?
如果源和目的参数有重叠,memmove()提供有保证的行为。
而memcpy()则不能提供这样的保证,因此可以实现的更加有效率。
如果有疑问,最好使用memmvoe()。
16. 我如何在printf的格式串中输出一个'%'?我试过"\%",但是不行。
只需要重复百分号:%%。\%不行,因为\是编译器的转义字符,而这里我们的问题最终是printf的转义字符。
17. 为什么大家都说不要使用gets()?
跟fgets()不同,gets()不能被告知输入缓冲区的大小,因此不能避免缓冲区的溢出。标准库的fgets()函数对gets()作了很大的改进,尽管它仍不完善。如果真的可能输入很长的行,还是需要仔细思考,正确处理。
18. 一个粗陋但通常有效的测试NaN的方法:
#define isnan(x)
((x) != (x))
C99提高isnan(), fpclassify()及其它一些类别的函数。
附:标准C函数库的源代码:
GNU工程有一个完全实现的C函数库()
19. 怎样判断机器的字节顺序是高字节在前还是低字节在前?
有个使用指针的方法:
int x = 1;
if(*(char *)&x == 1)
printf("little-endian\n");
printf("big-endian\n");
另外一个可能是用联合。
20. 由一个日期,怎样知道是星期几?
用mktime()或localtime()(注:如果tm_hour的值为0,要注意DST(夏时制)的调整);或者Zeller的congruence;或者这个由Tomohiko Sakamoto提供的优雅的代码:
int dayofweek(int y, int m, int d)
/* 0 = Sunday */
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m & 3;
return (y + y/4 - y/100 + y/400 + t[m - 1] + d) % 7;
阅读(...) 评论()您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
C语言8~13章复习题.doc 10页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
C语言8~13章复习题
你可能关注的文档:
··········
··········
第八章 函数 一、选择题1、以下正确的函数定义是( A )A) double fun(int x,int y) {
}B) double fun(int y) {
}C) float fun(y) {
}D) float fun(int x,y) {
}2、C语言中,函数返回值的类型是由( D )决定。A)主调函数的类型B)return语句中表达式的类型C)由系统临时指定D)定义该函数时所指定的函数类型3、下列有关函数的说法正确的是( D )。A)在C语言中,若对函数类型未加说明,则系统隐含类型为void。B)C函数必须有返回值,否则无法使用。C)C函数既可以嵌套定义,又可以可递归调用。D)C函数中,形式参数必须指定为确定的类型。4、用一维数组名作函数的实际参数,则传递给形式参数的是( A )A)数组首元素的地址
B)数组中第一个元素的值C)数组中元素的个数
D)数组中全部元素的值5、若已定义的函数有返回值,则有关该函数调用的叙述中错误的是( B )A)调用可以作为独立的语句存在B)调用可以作为一个函数的形参C)调用可以作为一个函数的实参D)调用可以出现在表达式中6、关于C语言中return语句正确的说法是( C )A)只能在主函数中出现
B)在每个函数中都必须出现C)可以在一个函数中出现多次
D)只能在除主函数之外的函数中出现7、如果在程序中使用了C库函数中的字符串函数,则应在源程序中使用的文件包含命令是( D )A)#include &stdio.h&
B)#include &stdlib.h&C)#include &math.h&
D)#include &string.h&8、已定义函数如下:int fun(int *p){ return *p;}则函数的返回值是( C )A)不确定的值
B)形参p中存放的值C)形参p所指存储单元的值
D)形参p的地址值9、以下叙述不正确的是( D )A)在不同的函数中可以使用同名的变量B)函数中的形式参数是局部变量C)在函数内定义的变量只在本函数范围内有效D)在函数内复合语句中定义的变量也可在本函数范围内有效10、以下正确的说法是( C )A)全局变量的的作用域一定比局部变量的作用范围大B)函数的形参可以是全局变量C)静态(static)变量的生存周贯穿于整个程序运行期间D)在定义变量时没有赋初值的auto变量和static变量的初值都是随机值 11、下列关于C语言全局变量与局部变量的叙述中,错误的是( C )A) 函数调用结束时,函数中静态局部变量不释放内存空间,变量值保留B) 函数调用结束时,函数中动态局部变量释放内存空间,变量值消失C) 全局变量的生存周期是从程序开始到程序结束D) 在一个函数或复合语句中,当局部变量与已有的全局变量重名时,在该函数或复合语句中局部变量不起作用。12、以下程序运行后输出结果是( A )#include &stdio.h&int a,b;void f(){ extern int a,b;
int x=20,y=25;
a=a+x+y;b=b+x-y;}void main(){ int x=9,y=7;
a=x+y;b=x-y;
printf(“%d,%d\n”,a,b);}A) 61,-3
D) 以上都不正确 二、填空题1、以下程序输出的最后一个值是( 120 )#include &stdio.h&int ff(int n){static int f=1; f=f*n; return (f);}void main(){ for (i=1;i&=5;i++)printf(“%d\n”,ff(i));}2、下列程序的功能是将字符串str中所有空格去掉,请填空:#include &stdio.h&void main(){ char str[]=“we are learning C Language.”;
int n=0,m=0;
{ if (str[m]!=‘ ’)
str[n++]=str[m];
m++;} while(str[m]!= ‘\0’);str[n]= ‘\0’;printf(“%s\n”,str);} 三、编程题例题:8.13、8.15、8.16、8.17,习题:8.3、8.4、8.11、8.13 第九章 预处理命令一、选择题1、有如下程序:#define N 2#define M N+
正在加载中,请稍后...

我要回帖

更多关于 ycm 函数补全 的文章

 

随机推荐