C语言错题4

导言:

前三篇文章都是编程题,
今天的五道则都是选择/填空题
当然,还是全部都是基础知识。

我在第二题处对于sizeof和strlen进行了对比,大家有兴趣可以看看

1.

题干:

定义了一维 int 型数组 a[10] 后,下面错误的引用是:
A. a[0] = 1;
B. a[0] = 5*2;
C. a[10] = 2;
D. a[1] = a[2] * a[0];

答案:

C

解析:

数组是相同类型的一段连续的空间,下标是从0开始的,比如:int array[N]
下标的范围为[0,N),其中N位置不能存储有效元素

2.

题干:

下面代码的结果是:( )

#include <stdio.h>
int main()
{
    int arr[] = {1,2,(3,4),5};
    printf("%d\n", sizeof(arr));
    return 0;
}

答案:

16

解析:

对于int arr[] = {1,2,(3,4),5}数组,里面总共有4个元素,(3,4)为逗号表达式,取后者,因此数组中元素分别为:1,2,4,5
而sizeof(arr)求的是整个数组所占空间的大小,即:4sizeof(int)=44=16

此处还是多说一句吧:
sizeof这个操作符可以用于任何类型的变量,它的结果是这个类型在当前操作系统下的所占字节的大小
而strlen这个操作符只能用于字符串,它的作用是用于测量字符串的元素个数,它遇到\0就会停止,当遇不到时,程序就会报错,其结果是随机值,比如很经典的“烫烫烫烫”
sizeof同样可以求数组的元素个数,格式如下:
sizeof(arr)/sizeof(arr[0]),sizeof是包含\0在内的
其实sizeof和strlen根本就没关系,初学者可能会在此处产生混淆,所以在此做出解释

3.

题干:

根据下面递归函数:调用函数Fun(2),返回值是多少( )

int Fun(int n)      
{ 
  if(n==5)   
    return 2;     
  else     
    return 2*Fun(n+1);      
}

答案:

16

解析:

代码运行过程如下:

Fun(2)--->返回16
 return 2*Fun(3)  2*8=16
      |__Fun(3):8
         return 2*Fun(4)  2*4=8
              |__Fun(4):4
                 return 2*Fun(5) 2*2=4
                      |__Fun(5):2  
                         return 2

4.

题干:

能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是:( )
A. return 这二个数
B. 形参用数组
C. 形参用二个指针
D. 用二个全局变量

答案:

A

解析:

这题选项可能对于初学者来说有点拿不准,
但其实记住一个知识点就可以了:
一个函数只能返回一个结果

5.

题干:

函数调用exec((vl,v2),(v3,v4),v5,v6);中,实参的个数是:

答案:

4

解析:

本题涉及到的知识点是:逗号表达式:
逗号表达式,即用逗号隔开的多个表达式,
这些表达式,从左向右依次执行,最后一个表达式的结果,为逗号表达式的结果
从这道题来看:
exec((vl,v2),(v3,v4),v5,v6) 总共有四个参数
(v1, v2)属于第一个实参,逗号表达式,真实的参数时v2
(v3,v4)属于第二个实参,逗号表达式,真实的参数是v4
v5属于第三个实参
v6属于第四个实参

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值