指针详解

指针与地址

指针是存放“地址”的变量。用 & 取地址,用 * 解引用。

#include <stdio.h>
int main(void) {
    int x = 42; int *px = &x;
    printf("x=%d, &x=%p, px=%p, *px=%d\n", x, (void*)&x, (void*)px, *px);
    return 0;
}

指针与数组

数组名在表达式中可退化为指向首元素的指针;*(a + i) 等价于 a[i]

void fill_zero(int *a, int n) {
    for (int i = 0; i < n; ++i) a[i] = 0; // *(a+i)=0
}

指针算术

指针加减会按“元素大小”步进;只对同一数组(或尾后)范围内指针做差是有定义的。

const 与指针

  • 指向常量的指针:const int *p(不能通过 p 修改指向对象);
  • 常量指针:int * const p(p 自身不能改指向)。

函数指针

int add(int a, int b) { return a + b; }
int (*fp)(int, int) = add; // 声明并初始化
int r = fp(2, 3); // 通过指针调用