重生之我是C语言
1. C语言的注释
多行注释:一种是以/*开始、以*/结束的块注释;
/* 这是 注释 */
单行注释:一种是以//开始、以换行符结束的单行注释
//这是注释
2. C语言数据类型和关键字
基本数据类型
C语言的基本数据类型为:整型、字符型、实数型。这些类型按其在计算机中的存储方式可被分为两个系列,即整数(integer)类型和浮点数(floating-point)类型。
这三种类型之下分别是:short、int、long、char、float、double这六个关键字再加上两个符号说明符signed和unsigned就基本表示了C语言的最常用的数据类型。
下面列出了在32位操作系统下常见编译器下的数据类型大小及表示的数据范围:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int a = 2, b = 1;//定义两个变量a,b并赋值
int c;//定义变量c用于计算a+b的和
c = a + b;
printf("a+b = %d",c);//输出结果a+b=3
return 0;
}
C语言关键字
在C语言中,为了定义变量、表达语句功能和对一些文件进行预处理,还必须用到一些具有特殊意义的字符,这就是关键字,我们用户自己定义的变量函数名等要注意不可以与关键字同名。
void关键字:空类型的关键字,void关键字不能定义变量,void用来修饰函数的参数或返回值,代表函数没有参数或没有返回值。
sizeof关键字:使用来测变量、数组的占用存储空间的大小(字节数)。
typedef关键字 :重命名相关的关键字。在C语言中,除系统定义的标准类型和用户自定义的结构体、共用体等类型之外,还可以使用类型说明语句typedef定义新的类型来代替已有的类型。typedef语句的一般形式是:
typedef 已定义的类型 新的类型;
typedef int INTEGER; /*指定用 INTEGER 代表 int 类型*/ typedef float REAL; /*指定用 REAL 代表 float 类型*/
在具有上述typedef语句的程序中,下列语句就是等价的:
int i, j; /*与 INTEGER i,j;*/ float pi; /*与 REAL pi;*/
当然typedef的最常用的作用就是给结构体变量重命名。
#include<stdio.h>
#include<string.h>
typedef struct _INFO
{
int num;
char str[256];
}INFO;
int main()
{
struct _INFO A;
INFO B; //通过typedef重命名后的名字INFO与struct _INFO完全等价!
A.num = 2014;
strcpy(A.str,"Welcome to dotcpp.com");
B=A;
printf("This year is %d %s\n",A.num,A.str);
printf("This year is %d %s\n",B.num,B.str);
return 0;
}
可以看到typedef可以为关键词改名,使改名之后的INFO类型等价于struct _INFO类型,让我们在定义这种结构类型时更方便、省事。
3. 存储相关的关键字
register、static、const、auto、extern
register 是 寄存器的意思,用register修饰的变量是寄存器变量。即:在编译的时候告诉编译器这个变量是寄存器变量,尽量将其存储空间分配在寄存器中。
注意:
(1):定义的变量不一定真的存放在寄存器中。
(2):cpu 取数据的时候去寄存器中拿数据比去内存中拿数据要快
(3):因为寄存器比较宝贵,所以不能定义寄存器数组
(4):register 只能修饰 字符型及整型的,不能修饰浮点型
register char ch; register short int b; register int c; register float d;//错误的
(5):因为register 修饰的变量可能存放在寄存器中不存放在内存中,所以不能对寄存器变量取地址。因为只有存放在内存中的数据才有地址。
register int a; int *p; p=&a;//错误的,a可能没有地址
static 是静态的意思,static 可以修饰全局变量、局部变量、函数。
const 是常量的意思,用const 修饰的变量是只读的,不能修改它的值。const 可以修饰指针。
const int a=101;//在定义 a 的时候用const 修饰,并赋初值为101
从此以后,就不能再给a赋值了。
extern 是外部的意思,一般用于函数和全局变量的声明。
4. if选择结构
if else选择程序结构用于判断给定的条件,根据判断条件的成立与否来控制程序的流程。选择结构有单选择、双选择和多选择3种形式,单选择结构用if语句实现。
形式一:
if(表达式) /*若条件成立则实行花括号里的语句,反之则不执行*/
{
//语句
}
形式二:
if(表达式) /*若表达式成立则执行语句1,否则执行语句2*/
{
//语句1
}
else
{
//语句2
}
形式三:
if(表达式) /*如果表达式成立,执行语句1否则继续判断表达式2*/
{
//语句1
}
else if(表达式2) /*如果表达式成立,执行语句2否则继续判断表达式3*/
{
//语句2
}
else if(表达式3) /*如果表达式成立,则执行语句3否则继续判断下一个表达式*/
{
//语句3;
}
//… …
else /*如果以上表达式都不成立 则执行语句4*/
{
//语句4
}
5. switch case语句
对于有三种或更多的结构,C语言除了用多分支选择结构else if之外,C语言还提供了switch的结构。
switch语句的执行过程为:首先计算表达式的值,然后依次与常量表达式依次进行比较,若表达式的值与某常量表达式相等,则从该常量表达式处开始执行,直到switch语句结束。若所有的常量表达式的值均不等于表达式的值,则从default处开始执行。一般形式如下:
switch(表达式) /*首先计算表达式的值*/
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
case 常量表达式3:语句3;
// ……
case 常量表达式n:语句n;
default:语句n+1;
}
6. break语句的用法
break,顾名思义,跳出的意思,仅用于跳出switch结构或循环结构,用于提前结束switch结构或循环。
如switch结构中,我们知道switch结构会判断从哪个case开始执行,然后接着后面所有的case后面的语句都执行完,但通常情况下我们希望仅执行一个case后面的语句,不希望输出多余的信息,因此这个时候就可以使用break语句跳出结束switch结构,如以下程序:
#include<stdio.h>
int main()
{
int value;
scanf("%d",&value);
switch(value)
{
case 1:printf("one");break;
case 2:printf("two");break;
case 3:printf("three");break;
default:printf("other");break;
}
return 0;
}
7. while循环语句
while语句创建一个循环,该循环在判断表达式为假(或0)之前重复执行。while语句是一个入口条件(entry-condition)循环,在进行一次循环之前决定是否要执行循环。因此有可能一次也不执行。循环的语句部分可以是一个简单语句或一个复合语句。
while(表达式)
{
循环体语句
}
do while语句创建一个循环,它在判断表达式为假(或0)之前重复执行。do while语句是一个退出条件循环,在执行一次循环之后才决定是否要再次执行循环,因此循环至少要被执行一次。循环的语句部分可以是一个简单语句或一个复合语句。
do
{
循环体语句
}while(表达式);
嵌入式软件工程师面试完全指南
面经一共32篇文章,12w+字数,包含全部最新的面试必问考点,4.7w+同学学习,2800+订阅,非常适合在找工作面经薄弱的同学,3200+订阅还会涨价,提前订阅提前享受,持续更新中。
原帖链接:https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM

好未来工作强度 32人发布