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

数据结构DAY1

思维导图

一、关键字的学习

(1)const 关键字

        const用于声明常变量,表示该变量的值不可以修改,称为常变量(只读变量)。

        它可以修饰基本数据类型,指针或结构体。

(2)static 关键字  【静态】

函数内部声明的静态变量,变量的生命周期从程序的开始到程序的结束而结束,但是作用域依然限于函数内。

在文件内声明全局静态变量或函数,其只能在当前文件中访问,无法在其他文件中使用。

(3)extern 关键字

extern 用于声明一个变量或函数,在其他文件中定义,常用于多文件程序中。

二、内存空间划分

① 一个进程启动后,系统会为该进程分配4G内存空间。

②3G~4G是内核空间,主要是底层驱动部分。

③ 0~3G是用户空间,主要是程序员写代码的操作部分。

        0~3G的用户空间,又可以分为:栈区、堆区、静态区

④ 静态区又划分了4个段:.bss段、.data段、.ro段、.txt段

⑤ 所有的进程共享3~4G的内核空间,每个进程会独立拥有0~3G的用户空间。

⑥ 应用层主要操作0~3G的用户空间,底层主要操作3~4G的内核空间

栈区的特点

        计算机自动申请空间,自动释放空间

        栈区存放数据的特点:先进后出(FILO-->First In Last Out),后进先出(LIFO)

        栈区对数据申请空间的先后顺序:地址从大到小。

堆区的特点

        手动申请,手动释放

        堆区存放数据的特点(符合队列的思想):先进先出(FIFO)、后进后出

        堆区的数据申请空间的先后顺序:地址从小到大

三、动态内存分配和回收(即:在堆区申请空间、释放空间)

        在C语言中使用malloc()函数申请堆区空间,使用free()函数释放堆区空间

malloc()函数、free()函数

malloc()函数功能:申请堆区空间
   需要包含头文件:#include<stdlib.h>
   函数返回值: void *, 使用时 需要强制转换
   参数:申请空间的字节大小,以字节为单位,可以借助于sizeof()运算符
   eg:
       单个申请: int *p1 = (int *)malloc(sizeof(int)); // ====>int *p1 = (int *)malloc(4);
       连续申请: int *p2 = (int *)malloc(sizeof(int)*3)
[内存泄漏,申请空间不释放。如何避免:在合适的位置释放空间]

2. free()函数功能:释放堆区空间
   需要包含头文件:#include<stdlib.h>
   函数返回值: void
   参数:要释放的指针 (指针存储的堆区空间的地址)              

野指针

        野指针就是未初始化或者未赋值,又或者释放之后,没有置空的指针

四、传值、传地址、值返回、地址返回

1】左值:即可以放在等号的左边,也可以放在等号的右边,有地址空间。例如:变量、堆区空间

2】右值:只能放在等号的右边,没有地址空间。例如:常量、临时值、表达式的结果

3】传值:将实参传递给形参的过程,传值就是将实参的数据复制一份给形参,所以形参的改变,不会影响实参。

4】传地址:将实参的地址传递给形参,形参可以是指针,也可以是数组进行接收,可以改变实参的数据,具体要看代码设计。

5】将一个数据返回,该函数的返回值,只能作为右值(值不能被改变)

6】将一个数据的地址返回,(保证该数据的生命周期要足够的长),该函数的返回值,可以作为左值。

五、再学const关键字

1】const修饰的变量,表示常变量,只读变量,意味着该变量的值不能被改变。

2】const修饰的全局变量在静态区.ro段, const修饰的局部变量在栈区。

3】const必须定义的同时初始化。

4】const结合指针的使用:

普通指针不能指向const修饰的常变量;使用:int const *p

如果想保存常变量的地址,需要对指针加以限制。

int const *p; //表示该指针的指向可以改变,指针指向里的值不可被改变【指针常量】

int * const p;//表示该指针的指向不可变,指向里的值可变。【常量指针】

int const * const p; //都不可变  

六、类型重定义 typedef

        给已有数据类型重新起个名字。可以使代码简洁、易懂。

七、宏定义 define

1】宏是一种预处理指令,常用于常量、函数、表达式等,提高代码的可读性,维护性。

2】宏只做替换,不做计算、也不做正确性的检查

带参宏的定义

        #define MAX(x,y) x>y?x:y    


http://www.mrgr.cn/news/79713.html

相关文章:

  • 新手从事直播软件源码开发搭建经验与技巧
  • AI 的时代,新科技和新技术如何推动跨学科的整合?
  • 【机器学习算法】——决策树:CART
  • 庐山派K230软件开发第九篇—— 图像检测
  • 暴雨首发 Turin平台服务器亮相中国解决方案AMD峰会巡展
  • PHP:连接Grid++Report模板,实现循环打印
  • 开发EDA工具常用的三方开源
  • 第七天:Linux中文本编辑工具和文本三剑客-grep 第八天:Linux中shell脚本编程1
  • python爬虫--小白篇【爬虫实践】
  • FPGA 17 ,FPGA 与 SR-IOV虚拟化技术,高性能计算与虚拟化技术的结合(FPGA 与 SR-IOV 和 PCI,高性能计算与虚拟化的完美融合)
  • python学opencv|读取图像(七)抓取像素数据顺利修改图像大小
  • Flutter:开发环境搭建和Android Studio创建Flutter Project
  • Harbor 仓库部署(docker-compose 部署方式)
  • coco数据集转换SAM2格式
  • 文件下载和图片预览 Blob FileReader
  • SQL汇总数据:聚集函数
  • linux系统使用nginx代理mysql数据库
  • 分布式 CAP理论 总结
  • 【视频笔记】408新增知识点信号——里昂视频
  • 手里有病理切片+单细胞测序的数据,如何开展医工交叉的研究?
  • 【CSS in Depth 2 精译_073】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(中):对 CSS 行高的深入思考
  • vue中父组件接收子组件的多个参数的方法:$emit或事件总线
  • Vue框架入门
  • 解决前后端分离跨域产生的session丢失问题
  • 一个直接看央视频道的软件,可直接安装到TV
  • DMA代码部分