跳至主要內容

10.指针

约 493 字大约 2 分钟

指针是 C 语言中的一种特殊数据类型,用于存储变量的地址

指向 变量

<数据类型> *<指针变量名称>;

int main() {
    // 数组
    int aa =1;
    int * bb = &aa;
    printf("数据aa: %d \n", aa);
    printf("数据bb: %d \n", bb);
    printf("数据&bb: %d \n", *bb);
    return 0;
}

指向 常量

常量指针(const pointer):指针本身是常量,指向的内容可以修改。
指针常量(pointer to const):指针所指向的内容是常量,指针本身可以修改。

int main() {
    int num = 10;
    int a = 11;
    // 声明一个常量指针,指向整型常量
    const int *ptr = &num;
    // 声明一个指针常量,指向整型变量
    int *const ptr2 = &num;

    printf("%d \n", ptr);
    printf("%d \n", ptr2);

    // 可以被改变
    ptr = &a;
    // ptr2 = &a;   语法错误了
    return 0;
}

指向 结构体

struct Rectangle {
    int width;
    int height;
};

int main() {
    struct Rectangle a;
    a.width = 1;
    a.height = 2;
    printf("width: %d \n", a.width);
    printf("height: %d \n", a.height);

    struct Rectangle *b = &a;
    printf("width: %d \n", b->width);
    printf("height: %d \n", b->height);

    return 0;
}

指向 数组

int main() {
    // 数组
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int *aa = arr;
    printf("数据: %d \n", aa);
    printf("数据: %d \n", *aa);
    printf("数据: %d \n", *(aa + 1));
    printf("数据: %d \n", *(aa + 2));
    printf("数据: %d \n", *(aa + 3));
    printf("数据: %d \n", *(aa + 4));
    printf("数据: %d \n", *(aa + 5));
    return 0;
}

指向 函数

int add(int a, int b);

int main() {
    // 指向函数的指针变量
    int (*ptr)(int, int) = &add;
    // 通过函数指针调用相应的函数
    int result = ptr(3, 4);
    // 打印函数调用的结果
    printf("Result: %d\n", result);
    return 0;
}

int add(int a, int b) {
    return a + b;
}

指向 空

在C语言中,NULL是一个宏定义,表示一个空指针常量。它通常被定义为一个整数常量0或者(void *)0,用于表示一个无效的指针。

#define NULL ((void *)0)

int main() {
    int *a = NULL;
    return 0;
}

野指针

未被初始化的指针,指向不合法的地址

指针运算符

+
-
++
--