指针基础和总结

1. 数组中的第一个存储区的地址加上下标可以得到下标对应的存储区的地址

2. 例如计算机处理数组的方式是 arr[4]- (*arr+4) 得到该存储区的内容

3. 数组和指针的区别

数组名称不可以赋值,代表的是存储区的首地址 不可以赋值。但是指针变量可以赋值。

对他们做sizeof 计算结果不同,对数组名称做计算代表数组的

含有的存储区的个数。而所有的指针进行的操作结果是 4

对他们进行取地址操作,结果不同。对数组名称取地址会变成二维数组 对指针取地址,和指向的内容没有关系

可以使用指针做循环变量依次操作数组里面的每个存储区

4 指针 可以跨函数使用存储区。因为指针变量记录的地址。只要和他进行捆绑就可以操作对应的存储区的内容。所有的函数只要访问这个地址,就会对这个存储区访问,实现跨函数访问存储区。静态局部变量和数组实际上都是指针的方式跨函数使用存储区。

5 使用指针类型的返回值可以让函数使用另外一个函数内部的静态局部变量

6 总之 只有指针能够跨函数使用存储区,跨函数使用存储区一定要遵守生命周期的规则,使用的方式就是指针类型的形式参数和指针类型的返回值,

7 声明指针变量的时候可以使用const  关键字 表示某一个存储区的内容不能修改,const 写在类型的名称前表示不可以对指针捆绑区进行赋值,也就是成了只读的指针存储区。只是不可以赋值,别的操作还是可以。跨函数  使用存储区时候如果指针的拥有者不希望别的函数修改自己的存储区 的内容    就用这个关键字进行声明 ,当函数跨函数使用存储区时候尽量在声明时候    加上这个关键字。如果声明指针吧const关键字加在名称前面表示不能对指针本身的存储区进行赋值。

8 可以在声明指针时候在*前面 使用void  无类型指针 可以和任意类型的指针    进行捆绑,不能通过指针类型得知存储区的类型。不能在无类型指针前面加* 。不能对无类型指针进行加减计算,无类型指针要首先强制类型转换为有类型指 针才能使用。无类型指针通常作为函数的形式参数使用,开始时候我觉得这个没用,后来才发现这个的神作用,现在的我还是初学者,但是我在别的开源函数见过这种的用法。

这种定义方法可以使得一个函数变得更加通用。只需要将指针变量强制转换成需要的类型,就可以将不同类型的实际参数赋值给形式参数。请记住这个强制转换的样子,不要以后都不记得。

9 总结下来,我觉得指针是伴随着函数的产生而产生的,函数的利用让我们不能随便的对定义的变量进行操作。因为函数的存在使得变量有了作用域,分为局部变量和全局变量。但是指针可以无视作用域,他只是受到声明周期的限制但是不会受到作用域的限制。任何函数只要对这片存储区进行了操作。存储区的内容就发生了改变。一般跨函数的使用指针变量是通过指针做形式参数和指针做返回值来实现的。

猜你喜欢

转载自www.linuxidc.com/Linux/2016-08/134250.htm