C语言学习笔记(抱佛脚版)

毕业一年,发现记性是真的差,每次想起之前的知识总是想不全,看别人写的资料也懵懵懂懂。于是我索性自己再学一遍,并且记录一下。希望对你们也有所帮助。

正片开始!

前面的什么if for都不难理解,嵌套的话也不难理解

重点讲比较容易忘记的,又特别重要的

数组

可以理解为容器,可以存储很多个相同类型的变量。如水杯,可以装液体。

将多个数据存储到一起,每个数据称为容器的元素。

数组概念:

1.相同类型的数据按一定顺序排列的集合,并且使用一个名字命名,通过编号的方式对数据统一管理

2.数组名、下标(或索引)、元素、数组长度

数组特点:

1.数组的元素在内存中依次紧密排列,有序的

2.创建数组对象会在内存开辟一整块连续的空间。占据的空间大小,取决数组的长度和数组中元素的类型。

3.可以直接通过下标的方式调用指定位置的元素,速度很快

4.数组一旦初始化完成,长度就是固定的 。数组长度一旦确定,就不能修改

5.数组名中引用的是这块连续空间的首地址

**数组维度分类:**一维数组、二维数组、三维数组、四维数组、等

使用方法: int i[5]; //整型数组,数组名i,长度6

char i[5]; //字符数组,数组名i,长度6

cpp 复制代码
调用数组:  
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语句,程序跳转到指定标号处执行。可以实现类似循环的效果

cpp 复制代码
void main()
{
    tiaozhuan:printf("你过来啊!\n");
    goto tiaozhuan;
}

//运行结果是无限输出 你过来啊!......

指针

指针是c语言的重要概念之一,也是最难理解的概念。ok学会了,咱就可以在简历上写,熟练c语言。

指针在刚开始学习的时候不怎么用,用的多的地方是结构体、链表的结点、二叉树等

cpp 复制代码
//例子
int a = 1;
int b = 2;
int c = a+b;  //那么c的值就是3
//这里用的就是直接访问,直接使用变量名访问
//间接访问就是利用指针

内存地址与指针

有效的访问内存的每个单元,给内存单元进行编号,编号叫做 内存单元的地址。

每个单元都有地址,包括变量存储的数据也有地址。

如上面的例子

|-----|------------|------------|-----------|
| 地址 | 0x00000004 | 0x00000002 | 0x000000B |
| 变量名 | a | b | c |
| 变量值 | 1 | 2 | 3 |

通过地址就能找到变量单元,把这个地址叫做指针
指针变量:一个变量专门存储另一变量的地址(即指针)。可以通过访问指针变量达到访问内存另外一个变量数据。

我需要取变量c的值,那么我可以通过指针从地址获取c的值为3

cpp 复制代码
指针的格式写法
int *p;    //可以写成以下任意格式:int * p; int* p;
//注意:1、指针变量的名字是p,不是*p。 2、指针变量中只能存地址,不能存任何非地址类型的数据。不要把任何其他的数值赋给一个指针变量。

结构体(struct)

结构体有什么用?结构体类似数组,但数组只能包含同类型的数据,结构体可以对多个不同类型的数据进行管理。

允许自定义复合数据类型,将不同的类型的值组合在一起,这种类型叫结构体

c语言没有其他语言的对象(object)和类(class)的概念,结构体理论上可以堪比对象和类。

cpp 复制代码
//结构体声明,构建一个结构体类型的一般格式

struct 结构体名{
    数据类型1 成员名1;    //;结尾
    数据类型2 成员名2;
    数据类型3 成员名3;
    ......
    数据类型n 成员名n;
};    //结尾需要有一个分号

----------------------------分界线
//案例1
#include <stdio.h>  // 支持 printf
#include <string.h> // 支持 strcpy


struct 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> // 支持 strcpy


struct 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;        //直接声明变量名,儿子123

int main(){
    //格式4:声明类型的同时定义变量 
    strcpy(son1.name ,"老铁");
    strcpy(son2.name ,"老王");
    printf("name = %s,name = %s",son1.name,son2.name);
    return 0;
}
相关推荐
FserSuN4 分钟前
Prompt工程学习之思维树(TOT)
人工智能·学习·prompt
哆啦A梦的口袋呀9 分钟前
基于Python学习《Head First设计模式》第九章 迭代器和组合模式
python·学习·设计模式
虾球xz15 分钟前
CppCon 2015 学习:3D Face Tracking and Reconstruction using Modern C++
开发语言·c++·学习·3d
sponge'29 分钟前
opencv学习笔记2:卷积、均值滤波、中值滤波
笔记·python·opencv·学习
竹言笙熙2 小时前
Polarctf2025夏季赛 web java ez_check
java·学习·web安全
过河不拆乔2 小时前
AWS 公开数据集下载与操作说明
学习·云计算·aws
小狗爱吃黄桃罐头2 小时前
正点原子[第三期]Arm(iMX6U)Linux移植学习笔记-12.1 Linux内核启动流程简介
linux·arm开发·学习
ljt27249606613 小时前
Compose笔记(二十六)--DatePicker
笔记·android jetpack
早日退休!!!3 小时前
性能优化笔记
笔记·性能优化
Chef_Chen4 小时前
从0开始学习R语言--Day20-ARIMA与格兰杰因果检验
开发语言·学习·r语言