这是我的第一篇笔记(以后我就要养成做笔记的好习惯)!
指针进阶
PS:
1: 使用指针之前一定要让指针向某个变量
2:数组变量是特殊的指针,其值等于a[0]的地址
3: [ ]运算符可以对数组做,也可以对指针做
4: * 运算符可以对指针做,也可以对数组做
5: 数组变量是const的指针,所以不能被赋值
6: const int a[ ]表示不能再变化的数组,必须在初始化时赋值
7: 为了保护数组不被函数破坏,可在函数参数表中定义参数为const
指针应用场景一:
- 交换两个变量的值
void swap(int *pa,int *pb)
{
int t=*pa;
*pa=*pb;
*pb=t;
}
指针应用场景二a:
- 函数返回多个值,某些值就只能通过指针返回
- 传入的参数实际上是需要保存带回的结果的变量
void minmax(int a[],int len,int *min,int *max)
{
int i;
*min = *max=a[0];
for(i=1;i<len;i++){
if(a[i]<*min){
*min=a[i];
}
if(a[i]>*max){
*max=a[i];
}
}
}
指针应用场景二b:
- 函数返回运算的状态,结果通过指针返回
int divide(int a,int b,int *result)
{
int ret=1;
if(b==0)
ret=0;
else{
*result=a/b;
}
return ret;
}
传入函数的指针:
- 函数参数表中的数组实际上是指针
- sizeof(a)==sizeof(int *)
- 但是可以用数组的运算符[ ]进行运算
当指针遇到const(只需判断const在*前面还是后面):
int i;
const int *p1=&i;//表示不能通过指针修改i的值(const在*前)
int const *p2=&i;//表示不能通过指针修改i的值(const在*前)
int *const p3=&i;//表示指针不能被修改(p3不能再指向其他变量)(const在*后)