Linux中C语言学习
1、C 编译器
请在命令行使用下面的命令来检查您的系统上是否安装了 GCC:
gcc -v
安装后,可看到如下信息:
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.11)
2、编译 & 执行 C 程序
接下来让我们看看如何把源代码保存在一个文件中,以及如何编译并运行它。下面是简单的步骤:
1. 打开一个文本编辑器,编写代码。
2. 保存文件为 helloworld.c。
3. 打开命令提示符,进入到保存文件所在的目录。
4. 键入 gcc helloworld.c,输入回车,编译代码。
5. 如果代码中没有错误,命令提示符会跳到下一行,并生成 a.out 可执行文件。
( gcc helloworld.c -o hello 编译helloworld.c文件并将编译后的文件命名为hello )
6. 现在,键入 ./a.out 来执行程序。
7. 您可以看到屏幕上显示 "Hello World"。
如果是多个 c 代码的源码文件,编译方法如下:
$ gcc test1.c test2.c -o main.out
$ ./main.out
test1.c 与 test2.c 是两个源代码文件.
3、存储类
(1)、auto 存储类
auto 存储类是所有局部变量默认的存储类
(2)、register 存储类
register 存储类用于定义存储在寄存器中而不是 RAM 中的局部变量。这意味着变量的最大尺寸等于寄存器的大小(通常是一个词),且不能对它应用一元的 '&' 运算符(因为它没有内存位置)。
寄存器只用于需要快速访问的变量
(3)、static 存储类
静态类,该类型的变量在一个程序文件中全局可见。
(4)、extern
外部类,该类型的变量在工程的所有程序文件中全局可见。
4、switch语句一般形式:
switch(表达式)
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
...
default:语句n+1;
}
5、循环控制语句
循环控制语句改变你代码的执行顺序。通过它你可以实现代码的跳转。
C 提供了下列的循环控制语句。点击链接查看每个语句的细节。
控制语句
描述
break 语句
终止循环或 switch 语句,程序流将继续执行紧接着循环或 switch 的下一条语句。
continue 语句
告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
goto 语句
将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。
6、enum(枚举)
枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。
枚举语法定义格式为:
enum 枚举名 {枚举元素1,枚举元素2,……};
注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。
枚举变量的定义
前面我们只是声明了枚举类型,接下来我们看看如何定义枚举变量。
我们可以通过以下三种方式来定义枚举变量
1、先定义枚举类型,再定义枚举变量
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;
2、定义枚举类型的同时定义枚举变量
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
3、省略枚举名称,直接定义枚举变量
enum
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
7、指针
是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:
type *var-name;
& 取其他变量的地址给指针变量
* 取指针变量所指地址的值
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针
8、结构体
定义结构
为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:
struct SIMPLE
{
int a;
char b;
double c;
}; //用SIMPLE标签的结构体,另外声明了变量t1、t2、t3
struct SIMPLE t1, t2[20], *t3;
访问结构成员
为了访问结构的成员,我们使用成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的一个.号。
结构作为函数参数
您可以把结构作为函数参数,传参方式与其他类型的变量或指针类似。
位域的定义和位域变量的说明
位域定义与结构定义相仿,其形式为:
struct bs
{
int a:8;
int b:2;
int c:6;
}data;
a占8位,b占2位,
由于位域不允许跨两个字节,因此位域的长度不能大于一个字节的长度,也就是说不能超过8位二进位
9、c语言中的“%d,%s,%c,%d,%f,%s”是什么意思
格式说明由“%”和格式字符组成
%d,用来输出十进制整数。
%f,用来输出实数(包括单,双精度),以小数形式输出,默认情况下保留小数点6位。
%c,用来输出一个字符。
%s,用来输出一个字符串。
如%d整型输出,%ld长整型输出,%o以八进制数形式输出整数,%x以十六进制数形式输出整数,或输出字符串的地址。
%u以十进制数输出unsigned型数据(无符号数)。注意:%d与%u有无符号的数值范围,也就是极限的值,不然数值打印出来会有误。
%.100f用来输出实数,保留小数点100位。
%e以指数形式输出实数。
%g根据大小自动选f格式或e格式,且不输出无意义的零。
10、共用体
共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值,定义与结构体类似。
union Data
{
int i;
float f;
char str[20];
} data;
共用体占用的内存应足够存储共用体中最大的成员。为了访问共用体的成员,我们使用成员访问运算符(.)。所有的成员都能完好输出,因为同一时间只用到一个成员。
11、typedef
C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。您也可以使用 typedef 来为用户自定义的数据类型取一个新的名字。例如,您可以对结构体使用 typedef 来定义一个新的数据类型名字,然后使用这个新的数据类型来直接定义结构变量,如下:
实例
#include
typedef vs #define
#define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同:
typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如您可以定义 1 为 ONE。
typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。
12、输入 & 输出
https://www.runoob.com/cprogramming/c-input-output.html
scanf() 和 printf() 函数
13、文件读写
https://www.runoob.com/cprogramming/c-file-io.html
14、预处理器
https://www.runoob.com/cprogramming/c-preprocessors.html