c语言指针

发布于:2023-01-04 ⋅ 阅读:(476) ⋅ 点赞:(0)

目录

定义:

指针大小:

不同指针类型意义:

野指针:

空指针:

指针运算:

数组指针:

指针数组:


定义:

指针是地址,指针变量存放变量。通俗上:指针是存放地址的变量。

把指针当成两个变量(方块)之间的线,更容易理解

指针大小:

一个内存单元默认是一个字节。每个内存单元有个编号叫做地址,取地址取的是第一个字节(内存单元)的地址,较小的地址。

32位机器地址4个字节

64位机器地址8个字节。

不同指针类型意义:

1.都可以存放指针

2.不同指针访问字节数不一样

char*型只访问一个字节

int*型访问4个字节。

double*型访问8个字节

访问的字节的不同,通过指针改变的字节数不同

指针变量可以存放不匹配的数据类型变量地址

3.指针类型决定加一跳几个字节。即指针步长

char*指针加1跳过一个字节

数组地址:存放第一个元素地址。

野指针:

指针指向是不明确的,不确定的

1.局部变量不初始化,默认是随机值,指针变量不初始化,指向的变量就是随机值,变成野指针。

2.越界访问:超出数组范围也变成野指针。

3.指针指向的变量被释放。eg:变量是在自定义函数的变量内,函数结束后那个变量已经被销毁。

指针变成野指针。

空指针:

1.p=NULL。初始化指针,使指针合法存在,指针指向空并没有指向原来变量,依然不能
NULL是 (void*)0
2.检测指针可用性:是否为NULL。if(p!=NULL)

指针运算:

1.指针加减整数:指向下一个地址

eg:*p++=0;后置加加

先*p=0;p=p+1;

--*p=0;
先--p;再使得*p=0;

(函数操作符知识)

2.指针加减指针:

前提:两块指针指向同一块空间,比如数组内。

在数组内:指针减指针的绝对值结果为元素个数。

数组地址下标越低,地址越低

特别的:

在c语言中不允许和指向第一个元素前的内存的指针比较,但允许和指向最后一个的元素后内存的比较。

 第一个vp不行,第二个vp可以

二级指针,变量存放指针地址;

定义:类型int** 变量。第一个int*表示指向类型,*表示这是个指针。

解引用:**变量两次解引用。

三次四次以此类推。

数组指针:

数组指针(数组的地址)和首元素的地址相同。

表示数组地址的两种情况:

1.&数组名取的是整个元素地址,数值和首元素地址一样。
可以通过加一来证明。

2.sizeof(数组名)计算整个数组空间。

指针数组:

int arr[3]={&a,&b,&c};

解引用:*(arr[i])

可以猜想arrr是二级指针,两次解引用可以得到a

使用一维数组模拟二维数组:放在数组内的元素是数组首元素指针:

解引用:*(*(p+m)+n)或p[m][n]

二维数组解引用实际上可能也就是这样

本文含有隐藏内容,请 开通VIP 后查看