手记

【备战春招】第十八天指针基础

课程内容:

指针基础

内存的操作

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) 段错误: 一般由用户访问了非法的内存所导致。

初始化之后可以写入地址,但是不可以直接操作

学习收获:

了解到了地址是用什么方式存的 还有几种特殊指针的类型 通过指针又深入理解了一些内存方面的知识

截图打卡:

0人推荐
随时随地看视频
慕课网APP