C语言提高_变量_结构体_指针_函数指针_栈的概念(韦东山学习笔记)

一、韦东山-C提高-变量和指针

1、变量和指针口诀

  • 变量,能变,能读能写,一定在内存里
  • 指针保存的是地址,32位机中地址为32位,指针都是4字节(一字节8位)

变量理解:

​ 单片机内存分为两部分——FLASH(程序存储器,只读)和 RAM(内存,动态存储区,可读可写),所以变量一定存放在内存中

​ 且变量还有如下性质:

  • 具有相应的地址(定义变量后,程序运行时会在RAM中开辟一块空间)
  • 不同类型不同大小(根据不同的数据类型,会开辟不同大小的空间,如 int 为 4 字节 ,char 为 1 字节)
  • 地址位数相同(地址都是32位——对32位机来讲)

指针理解:

int *p;
int a = 1;
p = &a;
  • 定义了一个 整型指针类型 的变量 p
  • 在内存中开辟了一块空间来存储这个变量
  • p变量中存放的是一个 4 字节的地址
  • *p 和 p,一个是表示p中存放的地址对应的地址空间内存放的值,一个表示p这个变量所对应空间中存放的地址

2、对于 volatile 的理解

作用:

  • 编译器在编译程序时,会自动进行优化,有些未使用变量会被编译器自动优化
  • 对于没有使用 volatile 定义的变量,有些时候会仅在CPU进行操作,但对于内存未进行写操作,因此对于寄存器必须加上 volatile ,避免CPU只读备份,不读硬件。
    在这里插入图片描述

3、对于 map 文件的理解

  • map文件中查找到的是 全局变量、静态变量
  • 掌握DSP存储器的使用和利用情况,进行存储器优化
  • 更精确的使用 RAM 空间
  • 找出崩溃地址

崩溃地址使用示例:https://www.cnblogs.com/yilang/p/11994448.html

4、KEIL 的调试使用

~工具栏按钮

~找到main.c

~打断点

~运行

~变量a

~Add to watch

~& 出地址

二、韦东山-C提高-sizeof 和 关键字

1、const

  • 不允许修改,存放在FLASH中
  • 定义一个常量

2、sizeof 在课程中的使用

  • 通过sizeof 来测试 *p 占用内存

在课程这一部分,主要还是通过sizeof 来具体理解 变量和指针

3、串口调试

~view

~serial windows

~USRT 1

~运行

4、static

  • 作用域在此文件内

5、extern

  • 可用可不用
  • 表 是 一个外部函数 / 外部变量
  • 可以写在头文件内,也可以写在使用外部变量的 .c 文件内

6、作用域

  • 通过 static 来限制 变量 / 函数的作用域范围
  • 相同的作用域范围内重名会出现冲突

7、补充

​ 即使 使用 static 定义的变量在 主函数之后,也不会使用同名称的全局变量。

​ # 三、韦东山-C提高-struct

1、struct

  • 使用 C标准 原有类型,创建了一个新的数据类型
  • 结构体不占用内存空间,定义变量后,结构体变量占用内存
  • 结构体在 面向对象思想中 理解为 封装
  • 结构体组合 在面向对象思想中 理解为 继承

2、内存浪费问题

  • 奇地址 访问一个字节 可以
  • 奇地址 访问四个字节 不可以

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dyWmaCXX-1636713635582)(570671B58838917FBA780198E48238F2.jpg)]

四、韦东山-C提高-变量赋值

1、结构体强制类型转换

wei = (struct person)a;  

2、破坏内存问题

struct person{
    char c;
    char d;
    int age;
};
struct person wei = ('A','B',40);
int *p;
p = (int *)&wei.c;
*p = 'C';
//讲课的时候,这里出现了类型警告,对于类型警告一定要

五、韦东山-C提高-通过指针赋值

1、原理

变量 -> 内存 -> 地址空间 -> 读写

## [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GH6IehSv-1636713676463)(15223D6C0D03AA98084EED1191018E39.jpg)]

六、韦东山-C提高-结构体指针_函数指针

1、结构体指针的使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vs67miJS-1636713676465)(DC5335FC72C951CB88A1773B381B26E5.jpg)]

2、函数指针

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lEgtF6D0-1636713676468)(E63422FF210D1784509B3B0048519AA7.jpg)]

七、韦东山-C提高-链表

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

八、韦东山-C提高-ARM架构和几条汇编指令

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LoLtyC3M-1636713676472)(654A22B330E38D79A5AFF08E9BFDE212.jpg)]

九、韦东山-C提高-全局变量的初始化和栈的引入

十、韦东山-C提高-局部变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zEhRbHsM-1636713676472)(31B21A776753DF6720DF8A911135CD54.jpg)]

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>