当前位置: 首页 > news >正文

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

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

正片开始!

前面的什么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
//这里用的就是直接访问,直接使用变量名访问
//间接访问就是利用指针

 内存地址与指针

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

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

如上面的例子

地址0x000000040x000000020x000000B
变量名abc
变量值123

通过地址就能找到变量单元,把这个地址叫做 指针

好比说一栋楼是内存,给楼层每户安排门牌号,这个门牌号就好比地址。

 指针变量:一个变量专门存储另一变量的地址(即指针)。可以通过访问指针变量达到访问内存另外一个变量数据。

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

指针的格式写法
举例1
int *p;    //可以写成以下任意格式:int * p; int* p;
//注意:1、指针变量的名字是p,不是*p。 2、指针变量中只能存地址,不能存任何非地址类型的数据。不要把任何其他的数值赋给一个指针变量。
举例2:同时声明两个指针变量
int *a,*b;
举例三:套娃,一个指针指向另一个指针,读取的是另一个指针的地址
二级指针
int **p;

指针应用场景(我之前一直好奇,为什么不直接访问)

场景1:使用指针访问数组或数组元素

场景2:应用在数据结构中

 结构体(struct)

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

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

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

//结构体声明,构建一个结构体类型的一般格式

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;
}

http://www.dtcms.com/a/98835.html

相关文章:

  • MyBatis基础三(注解开发)
  • 迅为iTOP-RK3576人工智能开发板Android 系统接口功能测试
  • 一阶谓词逻辑表示法、产生式表示法、框架表示法深度对比
  • stack的详细介绍,queue的详细介绍
  • 转发和重定向的区别详解
  • Java的string默认值
  • ffuf:一款高效灵活的Web模糊测试利器
  • 右值和右值引用【C++】
  • onlyoffice 多核心研究
  • 763划分字母区间解题记录
  • java基础:常见类和对象
  • 游戏被外挂攻破?金融数据遭篡改?AI反作弊系统实战方案(代码+详细步骤)
  • Linux|gitlab|二进制快速安装部署gitlab-ce教程
  • 19_20 js es6
  • std::countr_zero
  • 模型苏醒计划:Threejs 让静态模型「叛逆」起来
  • Java.util.logging (JUL) 终极指南:从基础配置到高级玩法
  • 外观模式_结构型_GOF23
  • 游戏引擎学习第192天
  • 第三卷:覆舟山决战(73-108回)正反人物群像
  • 习题1.43
  • 软件工程面试题(十一)
  • 【数据结构】队列
  • el-radio-group 中 el-radio-button value未能绑定上数值数据
  • 欢乐力扣:合并两个有序链表
  • Redis6数据结构之List类型
  • 25_闭包节流防抖
  • Gateway实战(三)、断言-时间、Cookie信息
  • 从零开始研发GPS接收机连载——16、接收天上卫星信号成功定位
  • Python之变量与数据类型总结