- 课程名称:嵌入式工程师
- 学习章节:指针基础
- 学习链接:https://class.imooc.com/sc/148/learn
- 讲师姓名:大白老师
课程内容:
指针基础
内存的操作
write
data ------>ram
把数据读到内存条中
read
ram ------> data
把内存条数据写到单元格中
分配内存的方法
通过变量名来分配
int a; //分配4byte的空间
c语言中对内存读写的方法
(1) 通过操作变量名来实现
int a;
a = 100; //写操作
printf(“a = %d\n”,a); //读操作
(2) 通过内存地址来进行读写操作
int a;
内存地址的获得方法: &a
规则:
-
- 地址: 访问地址中的内存
*(&a) = 100 ;//写操作
printf("(&a) = %d\n",(&a)); //读操作
指针类型设计由来
常量 变量的类型
10 int
3.15 float
‘A’ char
0xdff88 ?
(内存地址)
思考:内存地址该用什么样的类型来保存呢?
答: 为了解决这样的问题,C语言的设计者创建了指针类型,来保存内存地址。
所以说指针就是专门来保存地址的
指针类型定义方法
简介
数据类型 * 指针变量名;
例如:
char * p; //p的类型为char *
short *q; //q的类型为short *
int *m; //m的类型为int *
使用方法
int data = 10;
int * p = &data;
*p = 88;
printf("*p = %d\n",*p)
特殊指针
野指针
野指针:野指针指的是指针中保存的是无效的内存地址。用户直接使用,系统会提示段错误.
例如:
int *p;
*p = 800;
如果用输出函数输出*p就会出现下列错误
Segmentation fault (core dumped) 段错误: 一般由用户访问了非法的内存所导致。
void *指针
void * 是一种特殊的指针类型,可用于存放任意对象的地址。
例如:
int a = 10;
void *p = &a;
不过使用输出的时候要这样输出
printf(“result = %d\n”, *(int *)p);
缺点: 由于不知道地址中存放的是何种类型的数据,因此不能直接操作void*指针所指的对象
NULL指针
例如
int a = 0;
#define NULL (void *)0
用户习惯: int *p = NULL;
含义
含义: 定义指针的时候,一般会把指针的值初始化为0地址,仅仅用于初始化,
0地址我们用户一般,没有执行权限。直接对0地址操作操作,系统会提示段错误。
例如:
int *p = NULL;
*p = 800;
Segmentation fault (core dumped) 段错误: 一般由用户访问了非法的内存所导致。
初始化之后可以写入地址,但是不可以直接操作
学习收获:
了解到了地址是用什么方式存的 还有几种特殊指针的类型 通过指针又深入理解了一些内存方面的知识
截图打卡:
共同学习,写下你的评论
评论加载中...
作者其他优质文章