指针的一些零碎知识

1.数据结构中的指针

数据机构中的指针就是指向一块内存的地址,通过指针传递,可实现复杂的内存访问。

(1)函数指针:指向一块函数的入口地址。

(2)指针作为函数的参数:比如指向一个复杂数据结构的指针作为函数变量,这种方法避免整个复杂数据类型内存的压栈出栈操作,提高效率。

注意:指针本身不可变,但指针指向的数据结构可以改变。

(3)指向指针的指针:指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址。此时指针指向的变量长度也是4位。

2.堆和栈上的指针

指针所指向的这块内存是哪里分配的,决定它是什么指针,在堆上称为堆上的指针,在栈上为栈上的指针。

(1)堆上的指针:可以保存在全局数据结构中,供不同函数使用访问同一块内存。

(2)栈上的指针:在函数退出后,该内存即不可访问。

3.指针的释放

(1)释放该指针指向的内存,只有堆上的内存才需要我们手工释放,栈上不需要。

(2)将该指针指向NULL

4.指针与地址的区别

(1)指针意味着已经有一个指针变量存在,他的值是一个地址,指针变量本身也存放在一个长度为四个字节的地址中,而地址概念本身并不代表有任何变量存在。

(2)指针的值,如果没有限制,通常是可以变化的,也可以指向另一个地址。地址表示内存空间的一个位置点,它是用来赋给指针的,地址本身是没有大小概念,指针指向变量的大小,取决于地址后面存放的变量类型。

5.指针与数组的关系

它们的值都是一个地址,但前者是可以移动的,后者是不可变的。

6.怎样防止指针的越界使用问题?

必须让指针指向一个有效的内存地址。

(1)防止数组越界;

(2)防止向一块内存中拷贝过多的内容;

(3)防止使用空指针;

(4)防止改变const修饰的指针;

(5)防止改变指向静态存储区的内容;

(6)防止两次释放一个指针;

(7)防止使用野指针。

7.指针的类型转换

指针转换通常是指针类型和void *类型之前进行强制转换,从而与期望或返回void指针的函数进行正确的交接。

你可能感兴趣的:(指针的一些零碎知识)