• C语言--每日五道选择题--Day4


    第一题

    1、如果 x=2014 ,下面函数的返回值是( )

    1. int fun(unsigned int x)
    2. {
    3. int n = 0;
    4. while(x + 1)
    5. {
    6. n++;
    7. x = x | (x + 1);
    8. }
    9. return n;
    10. }

    A: 20 

    B: 21 

    C: 23 

    D: 25

    答案及解析 C

    这个函数的作用是对整型中0的个数进行统计

    x = x | (x+1) 的作用是每次循环把x的二进制中从右往左数的最后一位0变成1,直道变成全1的时候x+1就溢出为全0,循环结束。

    2014的二进制是0000 0000 000 0000 0000 0111 1101 1110,一共有9个1,所以就有23个0,需要循环23次,才能溢出,n就等于23,所以结果是23

    第二题

    2、下列语句定义 x 为指向 int 类型变量 a 的指针,其中哪一个是正确的( )

    A: int a , *x = a; 

    B: int a , *x = &a; 

    C: int *x = &a , a; 

    D: int a , x = a;

    答案及解析 B

    A选项的x是指针,赋值时使用a不合适

    C选项在赋值时a变量还没定义

    D选项中的x不是指针

    第三题

    3、下面有关空指针和未初始化指针,说法错误的是( )

    A: 对0x0这个地址取值是非法的

    B: 空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方

    C: 空指针与任何对象或函数的指针值都不相等

    D: malloc在其内存分配失败时返回的是一个未初始化的指针

    答案及解析 D

    malloc函数在内存分配失败时返回NULL,其余选项都正确

    第四题 (做错了)

    4、若有定义 int a[8]; ,则以下表达式中不能代表数组元素 a[1] 的地址的是( )

    A: &a[0]+1 

    B: &a[1] 

    C: &a[0]++ 

    D: a+1

    答案及解析 C

    C:a[0]先和++结合,形成一个表达式,不能对表达式取地址,会报错

    D:a计算时是首元素地址,再加1,就是a[1]的地址。因为a是指向int类型的,a+1会向后移4个字节,所以指向a[1]的位置。

    第五题

    5、以下选项中,对基本类型相同的两个指针变量不能进行运算的运算符是( )

    A: +

     

    B: - 

    C: = 

    D: ==

    答案及解析 A

    A错误,因为两个地址相加无意义也可能越界,所以规定不允许指针相加。

    B选项,可以求出两个数据元素储存位置之间的相隔同数据类型的元素个数

    C选项,赋值,没问题

    D选项,判断两指针是否相同

  • 相关阅读:
    分布式运用之Filebeat+Kafka+ELK 的服务部署
    软考高项-计算题(2)
    recurdyn接触特征参数含义
    Cookie、Session、Token的关系和区别
    Redis作者谈Redis应用场景
    使用代理IP常见问题有哪些?
    重复的子字符串(K M P算法)
    软件设计模式系列之九——桥接模式
    16、架构-可观测性-事件日志详细解析
    权限系统中的数据权限就该这么设计,yyds
  • 原文地址:https://blog.csdn.net/2302_76941579/article/details/134297267