2-4小时突击C语言(2)
存储类
这个面试过程中也经常被问到。
register存储类:用于定义存储在寄存器中而不是 RAM 中的局部变量。所以变量的访问速度更快,但是它不能直接取地址。
例如:
register int miles;
static 存储类:指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。
static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。
例如:
#include <stdio.h> /* 函数声明 */ void func1(void); static int count=10; /* 全局变量 - static 是默认的 */ int main() { while (count--) { func1(); } return 0; } void func1(void) { static int thingy=5; thingy++; printf(" thingy 为 %d , count 为 %d\n", thingy, count); }
实例中 count 作为全局变量只能在该文件下的函数内使用,thingy 使用 static 修饰后,不会在每次调用时重置。
输出结果:
thingy 为 6 , count 为 9
thingy 为 7 , count 为 8
thingy 为 8 , count 为 7
thingy 为 9 , count 为 6
thingy 为 10 , count 为 5
thingy 为 11 , count 为 4
thingy 为 12 , count 为 3
thingy 为 13 , count 为 2
thingy 为 14 , count 为 1
thingy 为 15 , count 为 0
extern存储类:定义在其他文件中声明的全局变量或函数。当使用 extern 关键字时,不会为变量分配任何存储空间,而只是指示编译器该变量在其他文件中定义。
例如:
第一个文件:main.c #include <stdio.h> int count ; extern void write_extern(); int main() { count = 5; write_extern(); } 第二个文件:support.c #include <stdio.h> extern int count; void write_extern(void) { printf("count is %d\n", count); }
第二个文件中的 extern 关键字用于声明已经在第一个文件 main.c 中定义的 count。
输出结果:
count is 5
运算符
运算符包括有:算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、杂项运算符
算术运算符:+、-、*、/、%、++、--
注意a++与++a的区别:
int c;
int a = 10;
c = a++;
printf("先赋值后运算:\n");
printf("Line 1 - c 的值是 %d\n", c );
printf("Line 2 - a 的值是 %d\n", a );
输出结果:
Line 1 - c 的值是 10
Line 2 - a 的值是 11
int c;
int a = 10;
c = ++a;
printf("Line 3 - c 的值是 %d\n", c );
printf("Line 4 - a 的值是 %d\n", a );
输出结果:
Line 3 - c 的值是 11
Line 4 - a 的值是 11
关系运算符:==、!=、>、<、>=、<=。最常应用于条件真假判断,if( A==B )
逻辑运算符:&&、||、!。也最常应用于条件真假判断,if( A&&B )
位运算符:&、|、^(异或运算符)
p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
如果:
A = 0011 1100
B = 0000 1101
A & B = 0000 1100
A | B = 0011 1101
A ^ B = 0011 0001
~A = 1100 0011
赋值运算符:
运算符 例子 运算符 例子
= C=A+B <<= C<<=2相当于C=C<<2
+= C+=A相当于C=C+A >>= C>>=2相当于C=C>>2
-= C-=A相当于C=C-A &= C&=2相当于C=C&2
*= C*=A相当于C=C*A ^= C^=2相当于C=C^2
/= C/=A相当于C=C/A |= C|=2相当于C=C|2
杂项运算符:sizeof()、&、*、? :
例子:
#include <stdio.h> int main() { int a = 4; short b; double c; int* ptr; /* sizeof 运算符实例 */ printf("Line 1 - 变量 a 的大小 = %lu\n", sizeof(a) ); printf("Line 2 - 变量 b 的大小 = %lu\n", sizeof(b) ); printf("Line 3 - 变量 c 的大小 = %lu\n", sizeof(c) ); /* & 和 * 运算符实例
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏主要是介绍嵌入式软件开发岗位的相关知识和学习攻略,为大家提供一份笔试与面试手册。包括有嵌入式软件开发岗位介绍与学习攻略;校园招聘和offer疑惑问题的介绍;在笔试方面,如何刷题为笔试作准备,提供往年笔试真题;在面试方面,提供相关知识的复习重点,提供面试真题。包括有:华为、蔚来、文远、大疆、三一、深信服、亚马逊、Intel、百度、科大讯飞、OPPO、京东、中兴、比特大陆|算能、美团等等