天天看点

Linux C基础笔记(3)

Linux C基础笔记(3)

补充申明:Linux C基础笔记共分为四部分,第一部分是Linux下基本命令,以及vi编辑器的使用还有C中的数据类型,第二部分为运算符、常量变量和输入输出。第三部分是控制语句、数组、字符串函数。第四部分为指针、函数以及分配内存管理。在写完这四部分之后我会继续上传数据结构、IO、以及网络编程的学习笔记,大家如果有需要学习Linux下编程的可以关注一下,我会将我所有的学习笔记发布在此供大家一起学习。(在笔记里面会有一些其他博主的总结,如果涉及到实属抱歉,您可以通过邮箱联系我,我会及时修改。[email protected])。

【0】控制语句

分支语句和循环语句
	分支语句
		if...else...
			(1)简化形式
			if(表达式)
			{
				语句块1
			}
			else
			{
				语句块2
			}
			(2)阶梯形式
			if(表达式1)
			{
				语句块1
			}
			else if(表达式2)
			{
				语句块2
			}
			....
			else
			{
				语句块n
			}
			(3)嵌套形式
			if(表达式1)
			{
				语句块1
			}
			else if(表达式2)
			{
				if(...)
				{
					...
				}
				else if(...)
				{
					...
				}
				else 
				{
					...
				}
			}
			....
			else
			{
				语句块n
			}

备注:多个if与多个else if详解:
	if与多个else if是分枝情况。只执行其中一条代码,if与多个if是并列情况,会顺序执行
    如果是多个else if的话,只要第一个if条件成立,即使满足else if的条件也不会执行else if及else的内容
	
	switch语句
		switch (表达式)
		{  
			case 常量表达式1:
				语句块1;
				break;
			case 常量表达式2:
				语句块2; 
				break;
			…
			case 常量表达式n:
				语句块n; 
				break;
			default	:
				语句块n+1
		}
		注意:
			switch中的表达式可以是整型或字符型表达式
			(也可以是枚举类型,新标准的c语言允许为任意类型.)
			每个常量表达式的值必须各不相同,否则将会出现矛盾。
			当表达式的值与case后面的常量表达式值相等时就执行此case后面的语句。
			“case 常量:”只起语句标号的作用。
			break语句在switch中的作用:强行跳出switch体转到其它某条语句,每个case后面应有一个break语句(否则程序的执行顺序将改变),default分支后的break可以省略。
			各个case出现的先后顺序不影响程序的执行结果.
			多个case可以执行一组语句. 
           

【1】控制语句之循环语句

注意:所有的循环语句都需要一个结束标志,如果没有,会是一个死循环

1.goto循环(一般不介意使用,除非是在内核开发中使用)
	本质实现的是一个跳转功能,在一个函数体内部执行跳转
	
	next:
		....
		goto next;
	
2.while循环
	先判断,后执行
	while(表达式)
	{
		语句块
	}
	
		  
3.do...while循环
	先执行后判断
	do{
		语句块
	}while(表达式);
	
4.for循环
	for(表达式1;表达式2;表达式3)
	{
		语句块
	}
	执行过程:
		先执行表达式1,在执行表达式2,如果表达式2成立,则执行语句块,
		再执行表达式3,执行表达式2,如果成立,再执行语句块
	
		表达式1:一般为对变量进行初始化
		表达式2:一般是一个判断条件,如果不成立,则结束整个for循环
		表达式3:一般是循环语句的结束标志,如果表达式2为假,从而结束整个循环
	
			……
           

【2】数组

1.一维数组
	声明数组  type arrayName [ arraySize ];    double balance[10];
	初始化数组 double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
		   double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};
	冒泡排序:	for(i = 0;i<n-1;i++) {
			for(j = 0;j<n-1-i;j++){
				if(a[j]>a[j+1]) {
					temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;    
				}
			}
        	}
   简单快速排序法
   每次拿前一个数据与后面的所有的数据进行比较,将最小的数据放在前一个位置,以此类推
   
2.二维数组
	声明数组 type arrayName [ x ][ y ];
	初始化  int a[3][4] = {  
				{0, 1, 2, 3} ,   /*  初始化索引号为 0 的行 */
				{4, 5, 6, 7} ,   /*  初始化索引号为 1 的行 */
				{8, 9, 10, 11}   /*  初始化索引号为 2 的行 */
				};
	int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
	
	备注:行可以省略,列不可以省。
           

【3】字符串函数

#include <string.h>
   size_t strlen(const char *s);
	功能:计算一个字符串的长度
	参数:	s:指定的字符串的首地址
	返回值:字符串的长度
	
#include <string.h>
	 char *strcpy(char *dest, const char *src);
 	功能:将src的数据赋值给dest,包括src的\0也会一起复制
	参数:dest:目的字符串的首地址
		 src:源的字符串的首地址
	返回值:与dest的值一样	
注意:必须保证dest足够大,否则会内存溢出

#include <string.h>
    char *strcat(char *dest, const char *src);

	功能:拼接两个字符串,将src的数据追加到dest的后面,从destz\0的位置开始追加
	参数:dest:目的字符串的首地址
		 src:源的字符串的首地址
	返回值:与dest的值一样
注意:必须保证dest足够大,否则会内存溢出

#include <string.h>
    int strcmp(const char *s1, const char *s2);
	功能:比较两个字符串的内容
	参数:	s1,s2:要比较字符串
	返回值:>0 s1 > s2
		   =0 s1 = s2
		   <0 s1 < s2

int strncmp(const char *s1, const char *s2, size_t n);
 	 功能:比较字符串前n个字符是否相等
	 参数:s1:第一个字符串,s2:第二个字符串,n 前n个字符
           

4【<string.h>】

size_t strlen(const char *s)                      求字符串长度

char *strcpy(char *dst, const char *src);         字符串复制

char *strcat(char *dse, const char *src);         字符串链接

int strcmp(const char *str1, const char *str2);   字符串比较

char *strchr(char *str,char c);                   查找字符c第一次出现的位置

char ^strstr(const char *str1,const char *str2);  查找子串h