C语言--每日选择题--Day30

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: C语言--每日选择题--Day30

第一题

1. i = 5,j = 7,i | j 等于多少?


A:1

B:3

C:5

D:7

答案及解析 D

|这个是按位或运算符,两个数的二进制位,有1为1,同0为0;

i的二进制:0101

j的二进制:0111

结果:        0111 = 7

第二题

2. 编译和执行如下c语言代码,系统将会输出什么?

#include <stdio.h>
int main() 
{
    char c = '0';
    printf("%d %d", sizeof(c), sizeof(char));
    return 0;
}

A:1 4

B:2 2

C:1 1

D:2 1

答案及解析 C

sizeof是计算数据类型的空间;

这就表明了,sizeof括号里的变量是什么数据类型,计算出的结果就是该数据类型对应的字节,如果sizeof括号里面是个表达式,需要计算的,记住,sizeof只是算数据类型的空间,并不会计算表达式,只会推测这个表达式的数据类型;

第三题

3. 下面代码段输出的结果是()

int **pp, *p, a=10, b=20;
pp = &p;
p = &a;
p = &b;
printf("%d,%d", *p, **pp);

A:10 10

B:10 20

C:20 10

D:20 20

答案及解析 D

这里是涉及一级指针和二级指针的知识,先给大家画个图:

首先pp是一个二级指针,存的是一级指针的地址,存的是p指针的地址;

其次p指针,先后存放的是a的地址,b 的地址

最后p是存b的地址;

一级指针存的是对应变量的地址,一级指针解引用是取到的这个变量;

二级指针存的是一级指针的地址,二级指针解引用一次,取到这个一级指针,再解引用是取到这个一级指针指向的变量;

第四题

4. 在64位系统以及64位编译器下,以下描述正确的是()

struct T 
{
    char a;
    int *d;
    int b;
    int c:16;
    double e;
};
T *p;

A:sizeof(p) == 24

B:sizeof(*p) == 24

C:sizeof(p->a) == 1

D:sizeof(p->e) == 4

答案及解析 C

本题考查的是对指针类型的理解和结构体的内存对齐;

相关博客:C/C++内存对齐规则(结构体、联合体、类)-CSDN博客

64位系统的指针类型占8字节,32位系统的指针类型占4字节;

结构体类型指针,访问内部数据要用 ' -> ',结构体变量访问内部数据用 ' . '


A:错误:p是一个结构体指针类型,只要是指针就是4/8个字节,而系统为64位,结果为8

C:正确:p->a 的数据类型是char类型,字节为1,结果正确

D:错误:p->e 的数据类型是double,字节为8,错误


B:错误,需要计算结构体的内存,直接上图,知识点在上面博客:


这里有一个特殊的成员int c : 16;这个叫位段,简单理解就是你给c赋值,会发生截断(二进制),保留的位数就是冒号后面的值,这里也就是保留16个比特位;

比如你p->c = 10;

二进制:0000 0000 0000 1010

截断:/ 0000 0000 0000 1010

结果:10

比如你的二进制位:1111 1010 0001 0101 0011

截断:1111 / 1010 0001 0101 0011

结果:1010 0001 0101 0011

第五题

5. 下列程序的运行结果是 3, 5,请为横线处选择合适的程序( )

#include <stdio.h>
struct S
{
    int n;
    char c[10];
} *p;
int main()
{
    struct S a[3] = {{3, "abc"}, {5, "def"}, {7, "ghi"}};
    p = a;
    printf("%d,", (*p).n);
    printf("%d\n", ______);
    return 0;
}

A:(++p) -> n

B:(a+1) -> n

C:p++ -> n

D:(p+1) -> n

答案及解析 ABD

首先这是一个结构体的数组,很容易理解;数组每一个元素都是结构体;

所以我们一步一步来;

要想找到5,就需要找到这个结构体数组的第二个元素

方式:a + 1,p + 1;

之后再取到对应的结构体内部成员

方式:(a + 1)->n,(p + 1)->n


A:正确,++p是前置++,返回的是++之后的值,相当于p+1

B:正确

C:错误,p++是后置++,返回的是++之前的值,相当于p,取到的是3

D:正确


相关文章
|
1月前
|
C语言
C语言—每日选择题—Day60
C语言—每日选择题—Day60
|
1月前
|
编译器 C语言
C语言—每日选择题—Day61
C语言—每日选择题—Day61
|
1月前
|
编译器 C语言
C语言—每日选择题—Day57
C语言—每日选择题—Day57
|
1月前
|
C语言
C语言—每日选择题—Day56
C语言—每日选择题—Day56
|
1月前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
32 2
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
|
1月前
|
算法 C语言 C++
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)(中)
从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
59 1
|
1月前
|
算法 编译器 C语言
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(上)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
29 3
|
1月前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(中)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
26 1
|
1月前
|
存储 编译器 C语言
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题(下)
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题
28 0
|
1月前
|
Java 编译器 定位技术
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题(中)
从C语言到C++_22(继承)多继承与菱形继承+笔试选择题
25 0