您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页C语言考核

C语言考核

来源:意榕旅游网


1. 若函数调用时的实参为变量时,以下关于形参和实参的叙述中正确的是

A 函数的实参和对应的形参共占同一存储单元

B 形参只是形式上的存在,不占用具体存储单元

C 同名的实参和形参占同一存储单元

D 函数的形参与实参分别占用不同的存储单元

2. 若变量已正确定义,有以下程序段

i=0;

do

{

printf(“%d”,i);

}

while(i++)

printf(“%d\\n”,i);

其输出结果是(0 1)

分析:while里面判断的语句不是真就是假,当为真时,程序继续执行,当不为真时,程序退出,而C语言中规定0为假,非0为真,根据这个条件进行判断,i=0;先执行一次循环,输出i=0,然后判断while,i++,i先使用原值,然后进行自加变成1,i=0时程序退出,执行输出为1

设有条件表达式:EXP ? i++ :j-- 则以下表达式与之完全等价的是

A (EXP==0) ? i++ : j--;

B (EXP!=0) ? i++ : j--;

C (EXP==1) ? i++ : j--;

D (EXP!=1) ? i++ : j--;

分析:C语言中规定0为假,非0为真,所以EXP为真的语句是B

设有定义:char p[]={‘1’,’2’,’3’},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是

A sizeof(p) 整个数组字符p的字节数

B sizeof(char) 一个char形数据的字节数

C sizeof(*q) *q=p,求的是q[0]这个元素的字节数

D sizeof(p[0]) p[0]元素的字节数

输出结果为:mmmm aaaa nnnn

分析:s[i]*(s+i)*(i+s)i[s],输出的结果是一样的

解答:首先可以把T_S8 *p和T_S16 nNUM看成是char *p和int nNum,把代码就行修改

分析:get_memory(str,100)中str是指针*str的值,就是把NULL(空指针地址)给了指针p,然后为地址p分配一个动态存储空间,可是*str还是指向空指针的指针,所以不能进行引用

空指针是没有存放内容的指针,而指向空的指针内存已经被占用只不过存储的内容为空,也可以间接认为NULL的值为0

正确修改:

#include

#include

#include

void get_memory(char **p,int nNum)

{

*p=(char*)malloc(sizeof(char)*nNum)

}

int main( )

{

char *str=NULL; //把指针指向空,防止野指针(未初始化的指针,默认指向了某个未知地点,这个地点可能是系统的某个重要代码,所以一旦对这个无知指针的某个行为改动了它所指向的系统代码,那系统就会出现问题)

get_memory(&str,100);

strcpy(str,”hello”);

}

分析:函数在被调用完之后会自动释放内存

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务