C语言选择题

以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向整数4的是()
A.
main()
{ int *p; fun(p);}
void fun(int *p)
{int s=4;p=&s;}
B.
main()
{ int *p; fun(p);}
void fun(int *p)
{p=(int*)malloc(sizeof(int));*p=4;}
C.
main()
{ int *p; fun(&p);}
void fun(int **p)
{*p=(int*)malloc(2);*p=4;}
D.
main()
{ int *p; fun(&p);}
void fun(int **p)
{int s=4;*p=&s:}

不知道怎么解答,请高手帮助,谢谢!

答案:C

解析:
这道题主要考两个概念:
1. 进入fun函数的参数p实际上是main中的变量p的拷贝,所以对fun里的p赋值将不会影响到main函数中的变量p;
2. fun函数中的变量s是临时变量,是在栈上开辟的s空间,当fun函数返回时,内存就会被释放掉。
对于每个选项的情况如下:
A: 不符合1,2
B: 不符合1
C: 完全符合,因为采用的是二级指针,而且是使用malloc在堆上开辟的空间,不会想临时变量s一样(当fun函数返回时被自动清理掉)
D: 不符合2

==================
补充:
对于上面的兄弟ph12 说的C中申请的空间不够,实际上是无碍的。
1. 有可能这个题是运行在16位机器上的,这样sizeof(int)就等于2;
2. 另,即使是运行在32位,或者更高的64位上。也不管是用的大端存储,还是小端存储,数字4都要小于0XFF,所以一定会在较低的16位上存储的,也就是malloc(2)空间上,所以上面的分析仍然成立。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-01-03
D

A 在调用函数时重新定义了一个指针P(新)并用P存放的变量地址赋初值。然后让P(新)指向整数4(相当于没有对P指针进行任何操作)
B 在调用函数时重新定义了一个指针P(新)并用P存放的变量地址赋初值。然后让P(新)重新指向一个新的内存并使P(新)指向整数4。
C 在调用函数时重新定义了一个指向P指针地址的变量P(新)。然后通过对P(新)的操作使P重新申请内存,并使P的地址值为4,相当于只改变了P的地址值。(看看你写的代码是不是有错误,如果写成**p=4就非常好了,说实话看了上面几个人写的,我对D也有些怀疑。但D最后输出P指向的值的时候绝对是4)
D 在调用函数时重新定义了一个指向P指针地址的变量P(新)。然后通过对P(新)的操作使P的地址为变量S的地址。(S的值为4)即使P指向的整数4。本回答被提问者采纳
第2个回答  2012-01-03
答案是B,

A, s是临时变量,无法传出fun。
C, malloc只申请了2个byte的空间,不是整数,整数是4
D, 和A一样, s是临时变量,一旦离开fun就不在有效了。
第3个回答  2012-01-03
B 可以,fun函数调用后开辟的内存没有释放,因此返回main时,指针仍指向整数4.
其它情况下,fun结束调用后,4所在的空间已经随函数释放。
C中申请的空间不够,整数一般情况下是4
第4个回答  2012-01-03
选B吧

c语言 选择题,选正确的,选好了给个说明
答案:D 评析:通常,预处理命令位于源文件的开头,也可以写在函数与函数之间;不能在一行上写多条预处理命令:宏名一般习惯用大写字母表示,以便与变量名相区别,但这并非规定,也可用小写字母。预处理命令是以#号开头的代码行,每一条预处理命令必须单独占用一行,由于不是C的语句,因此在结尾不能有...

C语言,题目中的选择题,求详细解析
正确答案应该是B.15。这里考察的重点是符号常量的使用。主函数中出现符号常量FUN(x,y) 则直接用 (x)<(y)?(x):(y)替代即可。本题中:k=10*FUN(i,j);可以看作:k=10*(i)<(j)<(i):(j);而i=10,j=15 所以按照运算优先级有:k=100<15?10:15;结果显然是15。故选择B。

c语言 一道简单的选择题
答案是D。分析:按%d%d%d格式输入时,要求用空白(空格、换行等)作为分隔符。当输入3 4,5时,因为3 4符合输入格式的要求,所以会将3赋值给a,4赋值给b。但接下来遇到了逗号,不符合输入格式的要求,scanf函数会提前退出,并返回2(表示成功赋值了2个值),而c不会被赋值(保持它原来的值2),...

C语言程序设计选择题两题,谢谢!
5.C 表达式a==b值为真,即1,所以m值为1 c!=d为假,所以n值为0

c语言指针选择题求解
1.选C。int a,*p;定义了一个整型变量a以及整型指针p;因此p=&a;p可以存放a的地址。2.选B。int a,*p=&a;因为a是一个变量,不存在*a这一个用法。3.选D。pp未定义错误。C是正确的,p1、p2以及p都是整型指针。4.a是整型变量,p是一级指针a的地址。q是二级指针p的地址。5.q指向null。

c语言选择题
答案:D A:s是字符数组,p是指向字符串的指针 B:显然数组s中的内容和指针变量p中的内容不相等,应该换一种说法“数组s中的内容和指针变量p所指向的字符串的内容相等”C:s数组的长度为6(包含结束符'\\0'),p所指向的字符串长度为5 D:*p='c',s[0]='c'

C语言的几道选择题,求答案,谢谢
1.for(n=0,n<20;n++)控制循环执行(D)次。A.19 B.21 C.22 D.20 解释:从n=0运行到n=19,你数数,应该是20次吧!2.一个C语言源程序至少应包含一个( A )。A.Main函数 B.用户自定义函数 C.语句 D.printf函数 解释:main函数是机器的识别函数,程序在main函数...

C语言多选题
C. char a[ ] = {‘s’, ‘t’, ‘r’, ‘i’, ‘n’, ‘g’, ‘\\0’}; D. char a[] = "string";2. 引用数组元素时,其数组下标表达式允许是(A和B)。A.整型常量 B.整型表达式 C.任何类型的表达式 D.任何类型的函数调用 3. 若有说明int a[ ]={ 1,2,3,4};则对a...

C语言选择题
答案:C 解析:这道题主要考两个概念:1. 进入fun函数的参数p实际上是main中的变量p的拷贝,所以对fun里的p赋值将不会影响到main函数中的变量p;2. fun函数中的变量s是临时变量,是在栈上开辟的s空间,当fun函数返回时,内存就会被释放掉。对于每个选项的情况如下:A: 不符合1,2 B: 不符合1...

计算机二级的c语言有哪几种题型?
计算机二级c语言考试题型有单项选择题、程序填空题、程序改错题、程序设计题四大类题型。各题型分值如下:一、单项选择题 单项选择题共四十题,四十分,每一个选择分值为1分,其中单项选择中含公共基础知识,该部分十道题,占10分。二、程序填空题 程序填空题有2-3个空,占比分值18分,该题型为上机题...

相似回答