毕业一年,发现记性是真的差,每次想起之前的知识总是想不全,看别人写的资料也懵懵懂懂。于是我索性自己再学一遍,并且记录一下。希望对你们也有所帮助。
正片开始!
前面的什么if for都不难理解,嵌套的话也不难理解
重点讲比较容易忘记的,又特别重要的
数组
可以理解为容器,可以存储很多个相同类型的变量。如水杯,可以装液体。
将多个数据存储到一起,每个数据称为容器的元素。
数组概念:
1.相同类型的数据按一定顺序排列的集合,并且使用一个名字命名,通过编号的方式对数据统一管理
2.数组名、下标(或索引)、元素、数组长度
数组特点:
1.数组的元素在内存中依次紧密排列,有序的
2.创建数组对象会在内存开辟一整块连续的空间。占据的空间大小,取决数组的长度和数组中元素的类型。
3.可以直接通过下标的方式调用指定位置的元素,速度很快
4.数组一旦初始化完成,长度就是固定的。数组长度一旦确定,就不能修改
5.数组名中引用的是这块连续空间的首地址
数组维度分类:一维数组、二维数组、三维数组、四维数组、等
使用方法: int i[5]; //整型数组,数组名i,长度6
char i[5]; //字符数组,数组名i,长度6
调用数组:
int i[5];//定义一个一维数组
i[0]=55; //对0下标的元素赋值
int a = i[0]; //将0下标i数组的元素值赋值给a
这里需要注意,int i[5]; 实际下标只能访问到 i[4]; ,如果访问下标5,属于数组标越界,编译器不一定报错,但是程序肯定是不对的。合理访问角标数值应该为 0~n-1
break和continue关键字
关键字 | 循环结构中的作用 | 适用范围 |
break | 跳出循环结构 | switch-case、循环结构 |
continue | 跳出当次循环 | 循环结构 |
goto关键字
无条件语句转移,执行goto语句,程序跳转到指定标号处执行。可以实现类似循环的效果
void main()
{tiaozhuan:printf("你过来啊!\n");goto tiaozhuan;
}//运行结果是无限输出 你过来啊!......
指针
指针是c语言的重要概念之一,也是最难理解的概念。ok学会了,咱就可以在简历上写,熟练c语言。
指针在刚开始学习的时候不怎么用,用的多的地方是结构体、链表的结点、二叉树等
//例子
int a = 1;
int b = 2;
int c = a+b; //那么c的值就是3
//这里用的就是直接访问,直接使用变量名访问
//间接访问就是利用指针
内存地址与指针
有效的访问内存的每个单元,给内存单元进行编号,编号叫做 内存单元的地址。
每个单元都有地址,包括变量存储的数据也有地址。
如上面的例子
地址 0x00000004 0x00000002 0x000000B 变量名 a b c 变量值 1 2 3 通过地址就能找到变量单元,把这个地址叫做 指针
指针变量:一个变量专门存储另一变量的地址(即指针)。可以通过访问指针变量达到访问内存另外一个变量数据。
//例子,int a = 1; int *p ;
结构体(struct)
结构体有什么用?结构体类似数组,但数组只能包含同类型的数据,结构体可以对多个不同类型的数据进行管理。
允许自定义复合数据类型,将不同的类型的值组合在一起,这种类型叫结构体
c语言没有其他语言的对象(object)和类(class)的概念,结构体理论上可以堪比对象和类。
//结构体声明,构建一个结构体类型的一般格式struct 结构体名{数据类型1 成员名1; //;结尾数据类型2 成员名2;数据类型3 成员名3;......数据类型n 成员名n;
}; //结尾需要有一个分号----------------------------分界线
//案例1
#include <stdio.h> // 支持 printf
#include <string.h> // 支持 strcpystruct qinshi{ //定义结构体:寝室int id; //床位号char name[20]; //姓名char gender; //性别char address[50]; //家庭住址}; //分号不能忘了 //调用结构体
int main(){//格式: struct 结构体类型名称 结构体变量名struct qinshi qin; //声明结构体变量,这个qin1是用来后面调用,可以替换qin.id = 1; //调用结构体成员//qin.name = "老王"; //数组不能重新赋值,只能赋值给数组的元素strcpy(qin.name,"老王"); //将数组元素赋值为 老王qin.gender = 'M'; //这里单符号赋值,要给单引号,否则会有问题strcpy(qin.address,"广东中山");printf("id = %d,name = %s,gender=%c,address = %s",qin.id ,qin.name, qin.gender, qin.address);return 0;
}
--------分界线-----
//案例2
#include <stdio.h> // 支持 printf
#include <string.h> // 支持 strcpystruct qinshi{ //定义结构体:寝室int id; //床位号char name[20]; //姓名char gender; //性别char address[50]; //家庭住址}; //分号不能忘了 //调用结构体
int main(){//格式2: struct 结构体类型名称 结构体变量名 = {初始化数据};struct qinshi qin = {1, "老王", 'M', "广东中山"}; //按顺序初始化 printf("id = %d,name = %s,gender=%c,address = %s",qin.id ,qin.name, qin.gender, qin.address);return 0;
}
//格式3:struct 结构名 结构体变量={.参数1=***, .参数2=***, ......};
struct qinshi qin = {.id=1, .gender='M',.address= "广东中山", .name="老王", };
//格式三灵活直观一点,不受顺序影响,阅读性高高的 ----------分界线----------//格式4:声明类型的同时定义变量
#include <stdio.h> // 支持 printf
#include <string.h> // 支持 strcpy
struct qinshi{ //定义结构体:寝室int id; //床位号char name[20]; //姓名char gender; //性别char address[50]; //家庭住址}son1,son2,son3; //直接声明变量名,儿子123int main(){//格式4:声明类型的同时定义变量 strcpy(son1.name ,"老铁");strcpy(son2.name ,"老王");printf("name = %s,name = %s",son1.name,son2.name);return 0;
}