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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务