c语言总结

1 学习工具

学习c语言推荐使用dev-c++,软件体积小,好下载。

2 关键字

Int,float,short,double,char,long数据类型
signed有符号类型
unsigned无符号类型
void空类型
struct结构体
union共用体
enum枚举
auto声明自动变量
const一个变量被修饰后值不再变化
extern全局变量
static静态变量
register声明寄存器变量
do while循环
for循环
if条件语句
switch case default
break跳出当前循环
continue跳过当前,继续下一个循环
typedef给数据类型换名
sizeof计算数据类型和变量长度
goto无条件跳转
return返回
define定义

3 标识符

给变量起名称,只能用字母、数字、下划线组成,数字不可以打头,注意,要用英文输入法码代码,例:_ab12、a2、a4d

4 注释

// 单行注释
/* */ 多行注释

/*
加法运算    
*/
int main(void)
{
	int a=3,b=4,c=0;
	c=sum(a,b);//求和
	printf("和:%d\n",c); 
	return 0;
}

5 数据类型

在这里插入图片描述

6 运算符

在这里插入图片描述

7 进制

在这里插入图片描述

8 转义字符

在这里插入图片描述

9 格式符

在这里插入图片描述

10 原码,反码,补码

在这里插入图片描述

补码意义:可以将加减乘除运算都当成加运算
如:
3-2=1
3: 0011
2: 0010
-2: 1010 反:1101 补:1110
0011+1110=10001 去掉最高位就是0001,即1
任何数值在内存中的存在形式都是以补码存在

11 函数

函数在主函数上方不用声明,在主函数下方要声明。

#include "stdio.h"

int max(int a,int b);//声明 

int sum(int a,int b)
{
	return a+b;
}


int main(void)  //主函数
{
	int a=0,b=0;
	a=sum(3,4);
	b=max(3,4);
	printf("求和:%d\n",a);
	printf("大数:%d\n",b);
	return 0;
}

int max(int a,int b)
{
	if(a>b)
	{
		return a;
	}
	else
	{
		return b;
	}
}


12 创建新的c文件并引用

新建一个c工程,然后再添加两个文件,名称一样,一个是.c文件,一个是.h文件。(有的工程很大,代码在一个文件看起来会很难受)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13 ASCII

原值ASCII对应值
048
A65
a97

14 数组

包前不包后,如array[3],索引值为0—2
数组的地址是首个元素地址

15 枚举

#include "stdio.h"

enum season
{
	spring,
	summer,
	autumn,
	winter
};

int main(void)
{
	printf("spring:%d\n",spring);
	printf("summer:%d\n",summer);
	printf("autumn:%d\n",autumn);
	printf("winter:%d\n",winter);
	return 0;
}


结果
在这里插入图片描述
注:如果自己不定义的话,每一个值默认是在前一个值的基础上加1,如果让summer=3,那么autumn=4,winter=5,spring不变

16 指针

指针是重点,指针没学会相当于c语言没学会。
计算机的内存是以字节为单位的存储空间
每一个字节都有一个编号,编号称为地址
*p指针不能直接赋值,只能指向一个地址
成员访问运算符 ‘.’

#include "stdio.h"



int main(void)
{
	int a=10,b=0;
	int *p;
	p=&a;  //&是取址符
	b=a;
	printf("a:%d,p:%d,b:%d\n",a,*p,b);
	a=12;
	printf("a:%d,p:%d,b:%d\n",a,*p,b);
	return 0;
}


结果:
在这里插入图片描述
可以发现,*p和a的值一起变化的,而b不行
p是一个指针,指向的是a的地址,那个地址里的值发生变化,自然 *p的值会跟着发生变化
注:

int a=10;
int *p=&a;  //对      1
p=&a;       //对      2
*p=&a;      //错      3

以上三种方式,第三种是错误的
int *p其实是 int * 和 p

#include "stdio.h"



int main(void)
{
	int array[]={1,2,3,4,5};
	int *p;
	int i=0;
	p=array;//指向首地址,即第一个元素的地址 
	printf("p:%d\n",*p);//输出结果为1
	printf("========\n");
	for(i=0;i<5;i++)
	{
		printf("p:%d\n",*(p+i));//这里就要求数组和指针定义类型相同	
	} 
	return 0;
}


在这里插入图片描述
函数指针

#include "stdio.h"

int max(int a,int b)
{
	if(a>b)
	{
		return a;
	}
	else
	{
		return b;
	}
}


int main(void)
{
	int (*p)(int,int)=&max;  //函数指针 &可以省略
	int a=0;
	a=p(4,5);
	printf("a:%d\n",a);
	return 0;
}


17 字符串

#include "stdio.h"


int main(void)
{
	char season[]="spring";
	char *p;
	p=season;
	printf("first,%s\n",season);
	printf("*p:%c\n",*p);
	return 0;
}
 
#include "stdio.h"
#include "string.h"



int main(void)
{
	char a1[]={'1','2','3','4'};
	char a2[]={'a','b','c'};
	char a3[]={'7','7','7'};
	int t=0;
	printf("a1:%s,a2:%s,a3:%s\n",a1,a2,a3);
	//strcpy(a1,a2);//复制 
	strcat(a1,a2);  //连接 
	t=strlen(a1);   //字符串长度 
	printf("a1:%s,a2:%s,a3:%s\n",a1,a2,a3);
	printf("t:%d\n",t);
	t=strcmp(a2,a1);  //比较是否相同 
	printf("t:%d\n",t);
	return 0;
}



strchr用法

#include "stdio.h"
#include "string.h"



int main(void)
{
	char a1[]={'1','2','3','4'};
	char a2[]={'a','b','c'};
	char a3[]={'7','7','7'};
	char *t;
	t=strchr(a1,'2');//返回字符2所在位置的指针 
	printf("a1:%s,a2:%s,a3:%s\n",a1,a2,a3);
	printf("a1:%s,a2:%s,a3:%s\n",a1,a2,a3);
	printf("t:%s",t);
	return 0;
}



18 结构体

#include "stdio.h"
#include "string.h"

/*
struct students  //students相当于给结构体一个分类,毕竟内容不一样需要区分 
{
	char *ID;
	int score;
}student,s2;    //student相当于名称 
*/
/*
struct 
{
	char *ID;
	int score;
}student;
*/
/* 
struct students  
{
	char *ID;
	int score;
};    
struct students s1,s2,s3;
*/ 


typedef struct
{
	int english;
	int chinese;
	int math;
}SCORE;

typedef struct
{
	int ID;
	SCORE score;
	
}STUDENT;//将结构体定义成student 
 
void cpy(int ID,int english,int chinese,int math,STUDENT *student)//给结构体赋值
{
	student->ID            = ID;//这里只能用->,而不能用. 
	student->score.english = english;
	student->score.chinese = chinese;
	student->score.math    = math; 
}
 
STUDENT s1[10],s2,s3;

int main(void)
{
	cpy(123,88,90,100,&s1[1]);
	printf("id:%d\n",s1[1].ID );
	printf("chinese:%d\n",s1[2].score.chinese);
	return 0;
}




如何通过函数给结构体赋值字符串没有解决

#include "stdio.h"

typedef struct 
{
	char *name;
	int  id;
}stu;

stu s1,s2;

int main(void)
{
	s1.name ="afdjgsas";
	printf("name:%s\n",s1.name );
	return 0;
}

19 共用体

可以在相同的位置存储不同的数据类型。
共用体的多个数据类型同一时间只能使用一种类型。
共用体占有的内存按最大的数据类型算。
用途:存在两个数据不会同时用,用union会节省空间,少占一份空间

#include "stdio.h"

typedef union
{
	int a;
	float b;
	char c[20];
}data;

data a1,a2,a3;

int main(void)
{
	printf("size:%d\n",sizeof(a1));
	a1.a =10;
	a1.b =20.0;
	printf("a1.a:%d\n",a1.a );         
	printf("a1.b:%10.2f\n",a1.b );
	printf("发现a的值出错,b的值正常\n"); 
	printf("=========\n");
	printf("下面这种使用方法是正确的\n");
	a2.a=20;
	printf("a2.a:%d\n",a2.a );
	a2.b =30.0;
	printf("a2.b:%0.2f\n",a2.b );
	return 0;	
} 

20 typedef

给类型重新定义一个名字。
在51单片机中,经常见:

typedef unsigned char u8;
typedef unsigned int u16;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值