您的位置:首页 > 其它

第十章 数组和指针(关键字const,指针分析数组属性)总结 140519

2014-05-20 00:18 519 查看
       在函数调用传递参数时,可以向函数传递数值,也可以向函数传递指针。传递指针方法比传递数值方法效率高。因为传递数值时会把原来的数据拷贝一分到存储空间,然后把原来的数据复制到函数。而传递指针方法它是直接操作原函数数据的地址。传递指针可能因为编程写的代理错误而导致原始数据得到修改。为了避免这类错误可以在函数原型和定义的形式参数声明中用关键字const。这样就告知编译器:函数应当把参数作为包含常量数据对待,

关键字const:

        const 不但像用#defing 指令来声明常量,它还可以创建数组常量,指针常量,指向常量的指针 ,指向 常量的指针 

例了:const double * pd ; 通常把指向常量的指针用作函数参量 ,以表明函数不会用这个指针来修改数据 ,注意:常量或非常量数据的地址可以赋值结指向常量的指针,而非常量数据的地址才可以赋值给普通的指针。指针常量例了:double * const pc; 这样可以保证不会指向别处,还可用两个const来创建一个既不可以更改所指向的地址也不可修改所指向的数据,例:const double * const pc = 地址;

指针和多维数组:(这个比较难理解个人认为)

例子:int zippo [4] [2]; 数组名zippo同时也是数组首元素的地址。在本例中。zippo 的首元素本身又是包含两个int的数组, 因此 zippo也是包含两个int的数组地址。从指针属性分析如下 :

1. 因为zippo是数组首元素的地址,所以zippo的值和&zippo [0]相同。另一方面zippo本身是包含两个整数的数组,因此zippo【0】的值同首个元素(一个整数)的地址&zippo【0】【0】相同,不管zippo[0]是一个整数大小对象的地址,还是zippo两个整数大小对象的地址都开始于同一个地址。

2.对一个指针加1 会对原来的数值加上一个对应类型大小的数值,所以zippo[0]加1,只加上一个int类型的数值,而zippo加1,就要加上两个int数型的数值。

3.对一个指针
(地址)取值 (使用运算符或者带有索引的[]运算符)得到的是指针 所指向 对象的数值,因为zippo[0]是其首个元素 zippo [0][0]的地址,所以*(zippo [0 ])代表存储在zippo[0][0]中的数值。同样,*zippo代表其首个元素zippo[0]的值,但是zippo[0]本身就是一个int数的地址即&zippo[0][0],总结来说zippo地址的址址。需要两次取值才可以得到通常的数值。

如何声明指向二维数组的指针变量

我要想声明指向二维数组的指针变量要考虑首地址是包含两个值的数组, 所以声明的方法是 int (* pz) [2] ;//pz指向 一个包含2个int值的数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息