C/C++学习笔记之六(指针总结)
前两节对指针的定义、指针与数组的关系以及指针作函数参数来访问的作用。接下来,我们将讨论一些常见的用法及错误。
(1)const指针的用法
const指针限定指针的内存操作(即只可读内存而不可写内存),并不限制对指针的加减操作。
例:
int a=9;
const int *p=&a;
printf("%d",*p);//可以输出*p的值,只读,而未写;
*p=*p+1;//错误,p指针只可读内存而不不可写内存;
const只封禁*号操作,不允许修改内存的值,但对一般的指针加减运算并不影响。
像p=p+1;
p=p-1;都可以,只要保证不越界就行;
``
void print(const int *p,int length){
for(int *a=p;a<p+length;a=a+1){
printf("%d",*a);
}
}//这是可行的;
(2)如何正确的使用指针
1)弄清楚只指针指向哪里2)指向的地方是否有效3)严防数组越界
对于只定义而未赋值的指针的指针称为野指针,杜绝使用野指针;但空指针是可行的,如int *p=0,只需要加if(p)判断即可。主要应用在不想传参数时,只传递一个空指针即可。
变量失效:
#include<stdio.h>
#include<stdlib.h>
int *test(){
int a=0;
printf("%d",&a);
return &a;
}
int main(){
int *p=test();
printf("%d",p);
printf("%d",&a);//变量失效
*p=11;
printf("%d",p);
return 0;
}
“`
指针最好不要指向局部变量。