C语言-经典例题
一、单项选择题
1、
-- A
2、
-- C y<=5 --是关系运算符的优先级大于&& -- 是逻辑运算符
3、
-- B - D选项:c是float类型,所以c/2是1.5
4、
-- C 从后往前执行(先算=后面的)
5、
-- B %不能用来执行小数
6、
-- D ftell是指查看光标位置
8、
-- A 全局变量是具有初始值的
10、
-- C
11、
-- C
12、
-- B 如果选项里有68对应的字符D,就选字符D而不选68,因为c2是字符型
13、
-- A
14、
-- C &&运算符,前面为假的话后面就不会进入运算
15、
-- B p本来是个指针(也就是地址),*p是解地址,所以 * p为空间
16、
-- C
- &a+1表示偏移一整个数组的地址,原本位置在数组的首地址,偏移后在数组后面一个地址(意思就是在第二个数组的首地址),但是强转成(int *),这里记住 * 前面是什么类型,偏移就是按哪个类型。这里是int * ,下次偏移就是4字节, * (ptr-1)先后偏移四个字节也就是5,再解地址将5输出。
17、
-- B
18、
-- C
19、
-- B
20、
-- A 带#的
二、填空题
1、
-- =-127 环形存储
2、
-- 3
3、 !!!
-- 8,8,8
-
8 数组作为形参传过来的是首地址,sizeof(str)说明是地址的长度,固定是8
-
8,指针的大小,就是地址的大小(与开辟空间大小无关)
-
8 这是指针数组(数组里面存的是是指针,也就是地址)
4、
-- sizeof(table)/sizeof(table[0]);
5、
-- 0x1000030,0x1000002
- 指针偏移是偏移的是类型的空间大小,类型就看*前面是什么类型。这里是char类型,所以偏移2字节
7、
-
a^=1<<7 / a&=~(1<<7) (按位)
-
a|=(1<<7)
8、
- while:先判断后执行,循环操作可能一次都不会执行
- do...while:先执行后判断,循环操作至少被执行一次
9、
- 10,13,16,19,
-- stack 修饰的变量只会执行一次
11、
- #define MAX(a,b) (a)>(b)?(a):(b)
-- 加括号的原因是怕执行的时候有其他运算
12、
- 8,4
三、问答题
1、
- <> -- 优先从系统目录中查找头文件 "" -- 优先从项目目录中查找头文件
2、
-
static -- 修饰局部变量,提高其生命周期,但不延长作用域。修饰定义的全局变量或函数,表示该全局变量或函数私有化,不外借
-
extern -- 修饰声明的全局变量或函数,表示该全局变量或函数采用外部资源的内容
-
const -- 修饰变量,表示该变量的值不能改变,即为常量空间
3、
- 栈区、堆区、常量区,代码区,全局区(静态区)
4、
-
可以重名,有区别
-
(1)全局变量定义在{}外,局部变量定义在{}内
-
(2)全局变量具有初始值,局部变量没有初始值,默认是随机数
-
(3)全局变量的生命周期和作用域在整个程序中使用,局部变量仅作用在{}内活动。
-
(4)若全局变量和局部变量同名,采用就近原则,使用局部变量
5、
- 防止重复编译!!!
6、
-
g:int (* a)(int) // 函数指针 如果*在外面的话是返回值是指针的函数,就不是函数指针了,
-
h: int (*a[10])(int) // 函数指针数组 ,数组的元素是函数的指针
7、
-
栈是以一个数据存储结构,可以是线性存储,也可以是链式存储,用来保存数据的一种结构。
-
栈的特点:先进后出
-
堆的特点:先进先出
8、
-
(1)-- const修饰p,表示指针的值不能改变,但是地址所指向的空间的值可以改变
-
(2)-- const修饰*p,表示指针的值可以改变,但是地址所指向的空间的值不可以改变
-
(3)-- const修饰*p,表示指针的值可以改变,但是地址所指向的空间的值不可以改变
四、
1、
- 共用体是共用同一个内存,只用对一个变量赋值,小端模式是从低地址开始存储的,大端模式是从高地址。
- 目前大多数单片机用的是大端存储,而大部分电脑端和单片机端是小端存储,不一样的存储模式,所以要判断一下。