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)变量是否已经失效(这里关系到局部变量的概念)