2020-08-10 记录

#1

1 struct  student{
2 int num;
3 int age;
4 };
5 struct student stu[3]={{6001,20},{6003,21},{6005,19}};
6 struct student *p=stu;

A.++(p->num)

B.(p++)->num

C.(*p++).num

D.(*++P).num

上述表达式中可以表示值6003的是D。

解析:

有必要先搞清楚‘*’运算符和‘++’运算符的优先级:

访问值的方法有2种:

p->num或(*p).num

注意成员选择运算符'.'的优先级高于取值运算符‘*’,所以(*p)要加括号。

对于A选项:++(p->num)。表示取数组第一个元素的值(6001),然后+1;

对于B选项:(p++)->num。后缀自增运算符(++)与成员选择运算符(->)处于同一优先级,从左到右结合,但是指针偏移的操作直到表达式结束才会进行,

这个表达式相当于(p)->num;p=p+1;

对于C选项:(*p++).num。后缀自增运算符(++)优先级高于取值运算符(*),但是++直到表达式结束才会进行,这个表达式相当于(*p).num;p=p+1;

对于D选项:(*++P).num。前缀自增运算符(++)优先级和取值运算符(*)一样,先执行p=p+1操作,相当于(*(p+1)).num;

#2

i最后等于多少?

1 int i = 1;
2 int j = i++;
3 if( (i>j++) && (i++ == j) )
4 i+=j;

i=1;

执行int j = i++;后,j = 1; i = 2;

在条件判断中,i > j++为真,该表达式结束后,j=2;继续判断下一个条件,i++ == j;此时i = 2, j = 2;为真,表达式结束后,i = 3.

i += j;

最后i = 3 + 2 = 5.

#3

64位机上,一个结构体有三个成员,分别是char、int、short类型,三个成员位于结构体中不同位置时整个结构体的大小可能是下面哪些值?

解析:

在64位机上,char占1个字节,int占4个字节,short占2个字节。

这题考查内存对齐的概念:

百度百科:每个平台上的编译器都有自己的默认"对齐系数"。程序员可以通过预编译命令#pragma pack(n)来改变这一系数。n可以是1,2,4,7,16。

如果没有指定对齐系数,按编译器默认的来,还真不好说,这题是认为默认对齐系数是4,然而我用gcc测出来,默认对齐系数是8。呵呵。

反正一个结构体的大小必须是对齐系数的整数倍。

1.对于结构体的各个成员,第一个成员的偏移量是0,排列在后面的成员其当前偏移量必须是当前成员类型的整数倍

2.结构体内所有数据成员各自内存对齐后,结构体本身还要进行一次内存对齐,保证整个结构体占用内存大小是结构体内最大数据成员的最小整数倍

按照4字节的默认对齐系数:

排列方式有:

char short int:char1, 空1,short2, int4(数字表示字节数)= 8字节

char int short:char1, 空3,int4, short2, 空2 = 12字节

short char int:short2, char1, 空1,int4 = 8字节

short int char:short2, 空2, int4, char1, 空3 = 12字节

int char short:int4, char1, 空1,short2 = 8字节

int short char:int4, short2, char1, 空1 = 8字节

这种情况下,可能值为8字节或12字节。

#4

若以下选项中的变量a,b,y均以正确定义并赋值,则语法正确的switch语句是?

A.

1 switch(a*a+b*b)
2 {
3 default:
        break;
4 case 3:y=a+b;
5 break;
6 case 2:y=a-b;
7 break;
8 }

B.

 1 switch(a+b)
2 {
3 case 1:
4 case 3:
5 y=a+b;
6 break;
7 case 0:
8 case 4:
9 y=a-b;
10 }

C.

1 switch(a+9)
2 {
3 case a:
4 y=a-b;
5 case b:
6 y=a+b;
7 }

D.

1 switch a*b
2 {
3 case 10:
4 y=a+b;
5 default:
6 y=a-b;
7 }

解析:

对于A选项,看到default语句放到开头感觉怪怪的,不过不影响,它还是最后运行的;

对于B选项,虽然最后没有break语句,但是它还是对的,没有语法错误。。。栽在这里了;

对于C选项,case后面必须是常量(数字,字母,常量表达式);

对于D选项,switch后面的表达式没有括号,这就离谱了。

#5

以下多线程对int型变量x的操作,哪几个需要进行同步()?

A.x=y  B.++x  C.x=1  D.x++

解析:

A,B,D需要同步

非原子操作的都需要同步。

A.x=y  /*每个线程使用的y值不一样,可能出现覆盖*/

B.++x  /*x; x=x+1;可能同时存在2个线程读取x,然后写入x+1,覆盖写*/

C.x = 1  /*每个线程的赋值是一样的*/

D.x++  /*和B选项类似/

(关于多线程的还是比较迷。。。)

C语言专项错题集的更多相关文章

  1. Bug是一种财富-------研发同学的错题集、测试同学的遗漏用例集

    此文已由作者王晓明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 各位看官,可能看到标题的你一定认为这是一篇涉嫌"炒作"的文章,亦或是为了吸引眼球而起的标 ...

  2. 计算机二级C语言选择题错题知识点记录。

    计算机二级C语言选择题错题知识点记录. 1,在数据流图中,用标有名字的箭头表示数据流.在程序流程图中,用标有名字的箭头表示控制流. 2,结构化程序设计的基本原则:自顶向下,逐步求精,模块化,限制使用g ...

  3. C语言常见易错题集(分析及解答)(仅可用于交流,勿用于商业用途)

    1.能正确表示a和b同时为正或同时为负的逻辑表达式是( D  ). A.(a>=0||b>=0)&&(a<0||b<0)             B.(a> ...

  4. C语言错题集

    1.输入两个int型数a.b,求a/b的商c,不必考虑b为0的情况,输出c(保留两位小数) include<stdio.h> int main() { int a,b; float c; ...

  5. 【牛客 错题集】Linux系统方面错题合集

    前言:牛客Linux322道全部刷完,有些题目较老,甚至考核5系统,现在7都出来了几年了 = = 还有些题目解析的很好部分也摘录了进来.很多涉及嵌入式开发的选择题同样的摘录的作为了解使用 ------ ...

  6. C++笔试易错题集(持续更新)

    1.如下代码输出结果是什么? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include<stdio.h> char *myString() {     ...

  7. Coursera机器学习课程(2016 )错题集

    Unit 4 Neural Networks (×) 分析:估计D项错误,因为神经网络在处理逻辑运算的时候是range(0,1),但是处理别的运算的时候就不是这个范围了 (√) (对) week 6 ...

  8. java错题集

    解析:java中,JavaDoc注释以 /** 开头(中间写内容)以*/结尾 解析:A对象是类的实例,不是集合,其余正确 解析:创建一个对象的语法为: 类名 对象名=new 类名();,因此正确答案为 ...

  9. [C/C++] C/C++错题集

    1. 解析: A:在GCC下输出:0    在VC6.0下输出:1 B:在GCC下输出:段错误 (核心已转储)    在VC6.0下输出:已停止工作,出现了一个问题,导致程序停止正常工作. C:正常 ...

随机推荐

  1. 键盘敲入 A 字母时,操作系统期间发生了什么

    前言 键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「键盘敲入A 字母时,操作系统期间发生了什么吗」? 那要想知道这个发生的过程,我们得先了解了解「操作系统是如何管理多种多样的的输 ...

  2. 【干货!!】三句话搞懂 Redis 缓存穿透、击穿、雪崩

    前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩之间的区别,一直以来都挺困扰我的.特别是穿透和击穿,过一段时间就稀里糊涂的分不清了. 为了有效的帮助笔者自己,以及拥有同样烦恼的朋友们区分这三 ...

  3. 区块链入门到实战(37)之Solidity – 循环语句

    与其他语言类似,Solidity语言支持循环结构,Solidity提供以下循环语句. while do ... while for 循环控制语句:break.continue. Solidity – ...

  4. Redis高可用——副本机制

    目录 概念 配置 同步方式 起点 主从握手 部分同步 完全同步 执行完全同步判断条件 完全同步代码实现 为实现Redis服务的高可用,Redis官方为我们提供了副本机制(或称主从复制)和哨兵机制.副本 ...

  5. 【Azure DevOps系列】Azure DevOps生成代码覆盖率

    前言 在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Vi ...

  6. 揭秘日活千万腾讯会议全量云原生化上TKE技术实践

    腾讯会议,一款联合国都Pick的线上会议解决方案,提供完美会议品质和灵活协作空间,广泛应用在政府.医疗.教育.企业等各个行业.大家从文章8天扩容100万核,腾讯会议是如何做到的?都知道腾讯会议背后的计 ...

  7. miniapp基础

    文件目录 component 公共组件 img 图片 libs 插件,外部引入 pages 页面 utils 封装公共方法 wxParse html转wxml-->插件 app.js 公共逻辑方 ...

  8. 初级知识点一——C#中的值类型与引用类型

    从C#语言的定义中可以知道,C#支持两种值类型,分别是 值类型和引用类型,那么两者的区别到底在哪儿呢? 值类型特点: 1. 值类型包含 a 预定义的值类型 b 用户自定义的值类型(struct) 2. ...

  9. Google Kick Start 2020 Round B T1-3

    这场题目除了最后一题稍微难了点,其他都是1眼题. T1 Bike Tour 没啥好说的,一个循环解决. T2 Bus Routes 没啥好说的,从第\(n\)的车站开始贪心取最晚的. T3 Robot ...

  10. php反序列化总结与学习

    基础知识: 1.php类与对象 2.魔术函数 3.序列化方法 类与对象 <?php class test{ public $var = "hello world"; publ ...