0
点赞
收藏
分享

微信扫一扫

「C语言基础 6」初阶指针

1.什么是指针?

内存中最小单元的编号,本质是地址,但是口语上的指针通常指指针变量。

不同类型机器能够编址访问的地址空间也不同,32位机器能够编址2^32个字节空间,而64位机器能够编址2^64个字节空间。

补充:机器产生需要访问的虚拟地址后通过地址线传输访问内存。

2.指针类型

指针类型决定了:

1)指针再被解引用时的访问权限——访问多大的空间。

2)指针移动一步的距离。

3.野指针

野指针:指针指向的位置是不可知的(随机的、不确定的)

产生原因:

1)指针未初始化;

2)指针越界访问;

3)指针指向空间被释放,但是指针没有被置为空指针。

规避:

1)NULL初始化;

2)小心指针越界;

3)指针指向空间被释放时及时置为NULL;

4)指针在使用时检查有效性——是否为NULL。

补充:0地址到一定范围内的内存只允许操作系统使用,用户使用不了。

4.指针运算

1)指针加减整数——指针的前后移动

2)指针-指针——两个指针之间的地址数(字节数)

3)指针的关系运算——指针本质也是值

注意:C语言标准规定了,允许指向数组的指针与数组后面那个内存位置的指针作比较,但不允许与数组前一个内存位置的指针作比较。

5.指针和数组

数组名就是数组首元素的地址,但是数组和指针不是一回事。

6.二级指针

指向指针的指针,保存的是指针的地址,int*——指向的是int*类型,后一个*说明该变量是指针。

int a = 1;
int* p = &a;
int** pp = &p;

7.指针数组

保存指针的数组。

int arr1[5] = {0};
int p1 = arr1;
int arr2[5] = {0};
int p2 = arr2;
int* arr3[2] = {p1, p2};

举报

相关推荐

0 条评论