一文带你破解指针和数组的核心概念(指针,数组,指针数组,数组指针,函数指针,指针函数,函数指针数组)

1. 指针 (Pointer)

指针是一个变量,用来存储另一个变量的内存地址。

#include <stdio.h>

int main() {
    int x = 10;
    int *p = &x; // p 是一个指向 x 的指针

    printf("Value of x: %d\n", x);      // 输出 10
    printf("Address of x: %p\n", (void*)&x);  // 输出 x 的地址
    printf("Value of p: %p\n", (void*)p);     // 输出 p 中存储的地址
    printf("Value pointed by p: %d\n", *p);   // 输出 10

    return 0;
}

2. 数组 (Array)

数组是一组相同类型的数据的集合。

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5}; // 定义一个包含5个整数的数组

    for (int i = 0; i < 5; i++) {
        printf("arr[%d] = %d\n", i, arr[i]); // 输出数组中的元素
    }

    return 0;
}

3. 指针数组 (Array of Pointers)

指针数组是一个数组,其中每个元素都是一个指针。

#include <stdio.h>

int main() {
    int x = 10, y = 20, z = 30;
    int *arr[3] = {&x, &y, &z}; // 定义一个包含三个整数指针的数组

    for (int i = 0; i < 3; i++) {
        printf("Value pointed by arr[%d] = %d\n", i, *arr[i]); // 输出指针指向的值
    }

    return 0;
}

4. 数组指针 (Pointer to an Array)

数组指针是一个指向数组的指针。

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int (*p)[5] = &arr; // p 是一个指向包含5个整数的数组的指针

    for (int i = 0; i < 5; i++) {
        printf("(*p)[%d] = %d\n", i, (*p)[i]); // 输出数组中的元素
    }

    return 0;
}

5. 函数指针 (Function Pointer)

函数指针是一个指向函数的指针,可以用来调用函数。

#include <stdio.h>

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

int main() {
    int (*p)(int, int) = add; // p 是一个指向函数 add 的指针

    int result = p(2, 3); // 通过指针调用函数
    printf("Result of add(2, 3): %d\n", result); // 输出 5

    return 0;
}

6. 指针函数 (Pointer Function)

指针函数是返回指针的函数。

#include <stdio.h>

int* getPointer(int *p) {
    return p; // 返回指针
}

int main() {
    int x = 10;
    int *p = getPointer(&x); // 调用返回指针的函数

    printf("Value of x: %d\n", *p); // 输出 10

    return 0;
}

7. 函数指针数组 (Array of Function Pointers)

函数指针数组是一个数组,其中每个元素都是一个指向函数的指针。

#include <stdio.h>

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

int subtract(int a, int b) {
    return a - b;
}

int multiply(int a, int b) {
    return a * b;
}

int divide(int a, int b) {
    return b != 0 ? a / b : 0;
}

int main() {
    // 定义一个包含四个函数指针的数组
    int (*operations[4])(int, int) = {add, subtract, multiply, divide};

    int a = 10, b = 5;

    for (int i = 0; i < 4; i++) {
        printf("Result: %d\n", operations[i](a, b)); // 调用数组中的函数指针
    }

    return 0;
}

总结

  • 指针:存储一个变量的内存地址。
  • 数组:相同类型元素的集合。
  • 指针数组:数组中的每个元素都是指针。
  • 数组指针:指向数组的指针。
  • 函数指针:指向函数的指针,用来调用函数。
  • 指针函数:返回指针的函数。
  • 函数指针数组:数组中的每个元素都是指向函数的指针。
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值