Linux中的C语言程序设计
C语言:是Linux中最常用的系统编程语言之一。功能极其强大的程序设计语言。包含直接操作内存和硬件的底层计算语句,也包含高级语言所具有的数据结构、控制语句、函数调用等功能。是一门编译语言,而不是脚本语言。可使用Linux函数库和系统调用。
如何编写和执行C语言程序:使用任何文本编辑器编写C语言程序源文件.c。使用C语言编译器gcc编译源文件,生成独立可执行文件。在遇到错误时,编译器会给出错误信息停止编译,不会生成目标文件。
gcc编译格式:
gcc 源文件名 #生成的目标文件名为默认文件名a.out
gcc 源文件名 -o 目标文件名
gcc -o 目标文件名 源文件名
C语言程序构成:预处理器指令+程序主体。
预处理器指令:在文件开头以#开始的指令,不会被C语言编译器采用。常用来引用C语言头文件.h或设定宏。
#include <stdio.h>
#define PI 3.14
程序主体:变量声明、函数声明、函数定义、main主程序。
变量和常数:变量名必须以字母或_开头,其余部分可以包含字母、数字和_。每个变量必须声明类型后才能使用。变量在使用前必须初始化。
基本类型:int, char, float, double
派生类型:数组和指针
用户定义类型:结构,枚举,typedef
常量:
普通常量:const 类型 常量名=常量值
符号常量:#define 常量名 常量值
类型转换:
自动转换:数值类型自动转换,将一个较低类型变换为较高类型。表达式的值自动转换成赋值左边的类型,有可能造成信息丢失。char和short类型会自动变换为int类型。
float pi = 22/7.0;
隐式变换:常量使用后缀:L,F。强制类型转换:(类型)表达式
数组:数组声明:type array[n]={val1,val2,...,valn}; 数组下标从0开始,如长度为n,则最后一个数组下标为n-1。C编译器不做数组边界检查,可以访问未声明的数组下标项,但很危险。数组的实质是指向一组连续内存空间的指针。数组名表示的是数组中第一个元素的内存位置。字符串就是一个char类型的数组,最后一个元素为NULL(\0)。
控制结构语句:与awk和perl的控制结构语句格式相似。
switch语句
switch (exp) {
case val1: statements1; break;
case val2: statements2; break;
...
default: statementsn;
}
do-while语句
do {
statements;
} while (exp)
函数:
函数声明:
void function(void);
type function(type1 var1, type2 var2, ...);
函数定义:定义局部变量和函数体。
函数调用:
function()
var=function(exp1,exp2,...)
return 结束函数并返回值
函数参数传递:传值:实参的值赋给独立的形参。传址:实参的地址赋给形参的指针。
指针:单个内存位置的数值地址。指针变量:存储指针的变量。用途:直接操作内存地址、函数传址调用。
声明:type *p;
内存地址:&p
存储数据:*p
指针变量赋值:p=&a; *p=val;
指针运算:指针类型的大小不同于其指向的数据类型。指针的大小是固定的。指针之间的算术运算按照指针指向的存储空间大小来进行。对于未初始化的指针进行访问和操作都是危险的。任何类型的指针都可以指向NULL,void类型的指针可以指向任何类型。
int *p; //sizeof(p)=8; sizeof(*p)=4
int *p=&a;
p+n 等价于 p+n*sizeof(p)
*(array+n)等价于array[n]
*(p++) //把指针往后挪了一个步长,然后取值
*(p)++ //把p值取出,把值+1
&array[m]-&array[n]等于m-n //返回的不是地址差值,是差几个单元
指针与字符数组:
char st1[] = {'H','e','l','l','o','\0'}; //最后一位是NULL字符。
char st2[] = "Hello"; //给字符数组赋值字符串时会自动添加NULL
char *st3 = "Hello"; //给char指针赋值字符串时会自动添加NULL
可以通过printf的%s来输出st1,st2,st3
st1和st2是常量,不能进行赋值操作
st3可以进行指针运算,可以指向别的地址,也可以指向其他数组
C语言中不能直接比较两个字符串(st1 == st2 是非法的)
C语言命令行参数:在main函数定义中给出形参。在执行时,命令行参数存储在字符串数组argv中,字符数组的指针。参数个数存储在整型变量argc中。形参名字可以自定义。
int main(int argc, char *argv[ ])
C语言编译器和相关工具
C语言程序开发工具:编译器gcc,编译器更新make,生成库ar,调试工具gdb,版本控制工具。
gcc编译器:gcc命令包含预处理.i、编译.s、汇编(不可直接运行)和连接(加上头文件/库文件)4个步骤,最终生成可执行代码。gcc接受多种文件类型并依据用户指定的选项做相应处理。
格式:gcc [options] filenames