初学c/c++——浅谈指针

来源:互联网 发布:linux 查看文件 命令 编辑:程序博客网 时间:2024/05/19 23:18

1.指针

在我初学指针的时候,其实感觉指针和数组有点相似,但是其实两者有着本质上的区别。

数组信息在传递给函数,必须要有长度信息,比如:
   int avg( int* p , int len){{}}
   其中,*p是数组名即首地址,len为你所需要的长度,有首有尾。

指针作为输出参数时,返回多个值,指针传递的不是值,是地址。
pointer:是指针变量,其内容是地址量。
*pointer:是指针变量的目标变量,即指针指向的那个变量,其内容是数据。
&pointer:是指指针变量本身所占据的存储地址

一个数,有大有小,但是无论多大的数字,它的地址是固定的。所以我觉得数组和指针的区别,很大程度上是因为效率上的区别。

2.const 指针

1)
const指针,表示该指针是只读的
一般   –> const int*
不常用  –>int* const
一旦const后,指针则无法被修改,
指针指向的内存只能读不能写。
例子:
  int a = 10;
  const int* p=&a;
  p=&b;   //error!p不能被修改
  *p=11;    //error!不可写
  int b=*p   //right,可读

2)
const指针只是禁止星号操作,不允许写内存,
但是对于普通的指针加减是允许的。
例子:
  int sum(const int* p)
  {
    for(int i=0; i < 5 ; i++)
    {
       printf(“%d \n ” , *p ); //可以读
       p = p + 1 ;     //没问题
    }
  }

3.安全使用指针

在定义一个指针时,
 1)要想这个指针指向哪里?
 2)这个指针指向的地方是否有效?

一般指针,有三种:

指针指向 指向的后果 指向变量、数组 指向0(空指针) 空指针可以判断(用if),能够接受 野指针(wild pointer) 野指针,无法判断(不为0)

`

安全使用指针pointer
1)杜绝野指针
2)注意数组越界(超出定义范围)
3)变量是否已经失效(这里关系到局部变量的概念)

0 0
原创粉丝点击