指针进阶

85 阅读2分钟

这是我的第一篇笔记(以后我就要养成做笔记的好习惯)!

指针进阶

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在*后)