指针

1 篇文章 0 订阅
1 篇文章 0 订阅

赋值:可以把一个地址赋给一个指针。取地址:&

取值:运算符 * 可取出指针指向地址中存储的数值

声明:

  1. 一维数组:int (* pz) [2];  //pz 指向一个包含2个int值的数组,必须加括号,因为 [] 的优先级高于 * 。错误形式:int * pz[2],会先生成pz[2],再生成 * ,pz表示由两个指向int值的指针构成的数组
  2. 多维数组:int zippo[2][2] = {{1, 2},{3, 4}}; int(* pz) [2]; pz = zippo;

不能对未初始化的指针取值。(very dangerous)     当创建一个指针时,系统只分配了用来存储指针本身的内存空间,并不分配用来存储数据的内存空间。

关于数组:通常我们进行变量传递时,直接传递数值;只有需要在函数中修改该值时,我们才传递指针。对于处理数组的函数,只能传递指针,原因是只有这样能使程序效率更高。如果设计意图是函数不改变数组的说内容,那么可以在函数原型和定义的形式参量声明中使用关键字const。如:int sum(const int ar[], int n);  /*原型*/     int sum (const int ar[], int n)  {...}   /*定义*/    使用const可以对数组提供保护,就行按值传递可以对基本类型进行保护一样,可阻止函数修改调用函数中的数据。


关于const的补充:

使用const不仅可以创建符号常量,还可以创建数组常量、指针常量以及指向常量的指针。如

  • const double PI = 3.141592;                      /* PI 不能再被修改*/                            
  • const int day[MONTHS] = {31, 28, 31, 30, 31, 30, 31, 31,30, 31,30,31};   /*数组的值不能再被修改*/
  • doubles rates[3] = {2 , 3, 4}; const double * pd = rates;/*  pd 指向数组开始处,这样就不能使用pd来修改它所指向的数值。如*pd =4; pd[2] = 7;都是不允许的。但是仍然可以使用rates来修改其数值。   另外,可以让pd指向其他的地址,如:pd++,使*pd指向rates[1]*//*从“这一切都是为了保护数据”的角度去理解也许更容易*/

关于指针赋值和const

  1. 将常量或非常量数据的地址赋给指向常量的指针是合法的。然而只有非常量的数据地址才能赋给普通的指针。
  2. 可以使用const来声明并初始化指针,以保证指针不会指向别处。关键在于指针的位置:
    double rates [5] = { 1, 2, 3, 4, 5 };
    double * const pd = rates; //pc指向数组开始处
    pc = &rates[2]  //不允许
    *pc = 9;           //可以,更改rates[0]的值

        3.使用两个const来创建指针,既不可改变指针的指向,也不可改变指针所指向的数值。

    double rates [5] = { 1, 2, 3, 4, 5 };
    double const * const pd = rates; //pc指向数组开始处,前一个const的作用结果为不可改变指针所指向的数值,后一个const的作用结果为不可改变指针指向的地址
    pc = &rates[2]  //不允许
    *pc = 9;           //可以,更改rates[0]的值



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值