Linux-Chap5-C语言编程

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值