Linux基础之C基础

107 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

C语言

1.基础

(1).进制

1) 十进制 decimal 10

2) 二进制 binary 1010

3) 八进制 octonary 012

4)十六进制 hexadecimal 0xc

(2)词法符号

  1. 关键字 编译器内定的,不需要加任何头文件

C语言中的关键字: 32个 auto break case char const
continue default do double else
enum extern float for goto
if int long register return
short signed sizeof static struct
switch typedef union unsighed void
volatile while

  1. 标识符 自定义符号,变量(可为字母数字下划线,不能由数字开头) 定义变量: 存储类型 数据类型 变量名 存储类型: auto 自动 由编译器根据定义的位置 自动分配内存位置 register 寄存器类型
    extern 引用类型 变量不是在当前位置定义的, 用于引用其他位置(在 其 他文件中)定义的一个变量 const 常量类型 数据存放的位置 在 内存的常量区|代码段 static 静态类型 数据存放的位置 在 内存的 静态区

  2. 运算符 特殊的运算符——三目运算符(表示非此即彼的关系)

条件表达式?语句1:语句2;

  1. 分隔符 空格 回车 用于代码的 美观 增强可读

  2. 标点符号 参与编译 ,C语言的标点符号有严格要求

(3)基本数据类型

1.数据存储

位 1bit ==0|1

字节 bytes == 8bit

千字节 kb ==1024byte

兆字节 Mb ==1024kb

······

2.基本数据类型

1)整型(精确)

  bool		    1bit      0|1
  
  char			1byte     
  
  short		    2byte
  
  int			    4byte
  
  long			8byte

2)浮点型(非精确)

  float			4byte     6	(有效数据位,精确到几位)
  
  double			8byte     15(有效数据位,精确到几位)

注意字符用ASCLL码
,’0’=48 ‘A’=65 ‘a’=97 空字符=0

2.基础语句

(1).注释

1)单行注释			
 //我是单行

2)多行注释			
/*···     我是多行···*/

#if 0
我是多行
为0时注释,为1时执行,非常建议使用这种方式
#endif

(2)输入输出

(基于标准输入/输入c库,stdio.h)
1.输入
	putchar(char);  
	puts(str);
	printf();  
	printf("格式控制字符串",变量等 );	格式化输出
		如:printf("c=%d\n",c);


			格式声明	占位符%+格式字符
			%d : 数据按 10进制 整数方式输出 
			%c : 数据按 字符方式输出 
			%s : 数据按 字符串方式输出 
			%x : 数据按 16进制格式输出
			%o : 数据按 8进制格式输出
			%f : 数据按 浮点数格式输出 
			%e : 数据按 指数格式输出 
			%% : 输出 '%' 字符 
				%.2f(精确小数点后两位)	%-4d(字符宽度为4,左对齐)
				
			转义字符
			\n		换行
			\r		回车
			\0		空字符
			\\      字符'\'
2.输出
	getc(stdin);  //从终端读取一个字符
	gets(); 	  //从终端读取字符串   该函数不是安全的 
	fgets();	  //从终端读取字符串  以\n 作为结束符  
	scanf();      // 格式化输入

(3)选择语句

if()语句1else ()语句2

if()语句1else if()语句2else if()语句3;
   ······
   
switch(n)//多分支语句,执行多选一操作
{
	case 1:  语句块1 ; break;
	case 2:  语句块2 ; break;
	case 3:  语句块3 ; break;
			...
	default:  语句块n;
}

switch(n)//多分支语句,若n=2,则执行语句2,语句3
{
	case 1:  语句块1 ; break;
	case 2:  语句块2 ; 
	case 3:  语句块3 ; 
	default:  语句块4;
}

(4)循环语句

1)结构:
	do
	{语句块;}
	while(条件表达式);
	
	while(条件表达式)
	{语句块;}
	
	for( 循环量的初始化;循环条件; 循环递推)
		{循环体语句块;}
		
2)循环控制语句: 	
	break;   // 跳出循环, 提前结束整个循环 
	continue;// 继续   本次循环的后续 步骤不在执行, 重新开始新的循环
	return;  // 结束函数
	goto;    // 跳转到指定 位置继续执行 

3.数组

(1)一维数组

结构
		存储类型  元素数据类型  变量名[元素个数];
	定义及初始化
		int arr1[3]={0,1,2};	//全部赋初值 
		int arr2[]={0,1,2};		//全部赋初值时,可省略元素个数  	 
		int arr3[3]={};			//初值为空,即全部赋值为0
		int arr4[3]={1};		//部分赋值,即未被赋值的自动赋值为0
		
		char str1[]="hello";
		char str2[]={'h','e','l','l',o'};
		char str3[]={'h','e','l','l',o','\0'};
		str1==str3;他们均为字符串数组,字符串数组结尾必须有'\0'
		
	字符串处理函数(基于string.h头文件)
        
        			#include<stdio.h>
			#include<string.h>
			char str1[]="hello",str2[]="Hello",str3[]="hello",str4[10];
			int main()
			{
				printf("%d\n",strlen(str1));		//求字符串长度
				printf("%d\n",strcmp(str1,str3));	//比较字符串
				printf("%d\n",strcmp(str1,str2));
				printf("%d\n",strcmp(str2,str1));
				printf("%s\n",strcat(str2,str1));	//字符串追加
				printf("%s\n",strcpy(str4,str1));	//字符串复制
				return 0;
			}


(2)二维数组

	二维数组的定义和表示: 
		int arr[2][5];
		存储类型	基本数据类型  数组名[行数][列数];

	二维数组的初始化:
		char str[2][10]={"hello","world"};
		int arr[2][5] = {{1,2,3,4,5} ,{ 10,9,8,7,6}};
				          arr[0]			arr[1]

4.函数

#include<stdio.h>
static int num=4//全局变量,静态区、全局区
int fun1_find_max(int a,int b,intc)		
{
	int max,count=4;				
	if(a>b&&a>c)max=a;
	else if(b>a&&b>c)max=b;
	else if(c>a&&c>b)max=b;
	
	return max;					
}

int main(){
	int max;
	max=fun1_find_max(15,7,9);		
	printf("max=%d\n",max);
	printf("num=%d\n",num);		
	printf("count=%d\n",count);		
	return 0;
}

总结 linux C语言其实就是在linux系统下编写C代码,使用vim或者vi编辑器编写代码,再使用gcc编译器编译链接,使用起来更偏向底层,若你使用集成开发环境编写代码,是隐藏了底层逻辑的。 本章节重点内容还是C语言基础,linux只是一个工具而已。