C语言数组语法解剖

  • 任意的数组,不管有多复杂,其定义都由两部分组成。
    • 第1部分:说明元素的类型,可以是任意的类型(除了函数)
    • 第1部分:说明数组名和元素个数
int   a[4];             // 第2部分:a[4]; 第1部分:int
int   b[3][4];          // 第2部分:b[3]; 第1部分:int [4]
int   c[2][3][4];       // 第2部分:c[2]; 第1部分:int [3][4]
int  *d[6];             // 第2部分:d[6]; 第1部分:int *
int (*e[3])(int, char); // 第2部分:e[3]; 第1部分:int (*)(int, float)
  • 注解:
    • 上述示例中,a[4]、b[3]、c[2]、d[6]、e[3]本质上并无区别,它们均是数组
    • 上述示例中,a[4]、b[3]、c[2]、d[6]、e[3]唯一的不同,是它们所存放的元素的不同
    • 第1部分的声明语句如果由多个单词组成,C语言规定需要将其拆散写到第2部分的两边
int  *d[6];            

int *d[6]; 是一个 C/C++ 中的声明语句,表示一个指针数组,其中包含了6个指向整型变量的指针。

具体解释如下:

  • d 是一个数组名,它是一个指针数组,用于存储指向整型变量的指针。
  • *d 表示指针数组中的元素,它是指向整型变量的指针。
  • int *d[6] 指定了数组的大小为 6,即 d 包含了6个元素,每个元素都是一个指向整型变量的指针。

可以通过下标来访问指针数组中的元素,例如 d[0] 表示第一个指针元素,d[1] 表示第二个指针元素,以此类推。

示例用法如下:

int main() {
    int a = 1, b = 2, c = 3, d = 4, e = 5, f = 6;
    int *ptrArray[6];  // 声明指针数组

    // 将变量的地址存储在指针数组中
    ptrArray[0] = &a;
    ptrArray[1] = &b;
    ptrArray[2] = &c;
    ptrArray[3] = &d;
    ptrArray[4] = &e;
    ptrArray[5] = &f;

    // 访问指针数组中的元素并输出对应变量的值
    for (int i = 0; i < 6; i++) {
        printf("ptrArray[%d] = %d\n", i, *ptrArray[i]);
    }

    return 0;
}

输出结果:

ptrArray[0] = 1
ptrArray[1] = 2
ptrArray[2] = 3
ptrArray[3] = 4
ptrArray[4] = 5
ptrArray[5] = 6

  int (*e[3])(int, char);

int (*e[7])(int, char); 是一个 C/C++ 中的声明语句,表示一个包含7个元素的指针数组,每个元素都是一个指向函数的指针,该函数接受一个整型参数和一个字符参数,并返回整型值。

具体解释如下:

  • e 是一个数组名,它是一个指针数组,用于存储指向函数的指针。
  • *e 表示指针数组中的元素,它是一个指向函数的指针。
  • (*e[7]) 表示指针数组的声明,其中 7 指定了数组的大小为7,即 e 包含了7个元素,每个元素都是一个指向函数的指针。
  • (int, char) 表示函数的参数类型,这里是一个整型和一个字符型。
  • int 表示函数的返回类型,这里是整型。

可以使用下标或指针算术运算符来访问指针数组中的元素,例如 e[0] 表示第一个函数指针元素,e[1] 表示第二个函数指针元素,*(e + i) 表示第 i+1 个函数指针元素。

示例用法如下:

#include <stdio.h>

int add(int num, char ch) {
    return num + ch;
}

int multiply(int num, char ch) {
    return num * ch;
}

int subtract(int num, char ch) {
    return num - ch;
}

int main() {
    int (*ptrArray[7])(int, char);  // 声明函数指针数组

    // 将函数的地址存储在函数指针数组中
    ptrArray[0] = add;
    ptrArray[1] = multiply;
    ptrArray[2] = subtract;

    int result1 = ptrArray[0](3, 'a');  // 调用第一个函数指针所指向的函数
    int result2 = (*ptrArray[1])(4, 'b');  // 使用指针算术运算符访问第二个函数指针所指向的函数

    printf("Result1: %d\n", result1);
    printf("Result2: %d\n", result2);

    return 0;
}

输出结果:

Result1: 100
Result2: 204

相关推荐

  1. C语言数组语法解剖

    2024-02-08 22:56:02       50 阅读
  2. C语言 数组指针

    2024-02-08 22:56:02       67 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-08 22:56:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-08 22:56:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-08 22:56:02       82 阅读
  4. Python语言-面向对象

    2024-02-08 22:56:02       91 阅读

热门阅读

  1. 2024/2/7

    2024-02-08 22:56:02       38 阅读
  2. C++生成动态库给C#使用

    2024-02-08 22:56:02       55 阅读
  3. LeetCode 491 递增序列

    2024-02-08 22:56:02       52 阅读
  4. 感觉 sheet.setDefaultColumnStyle 存在 bug

    2024-02-08 22:56:02       53 阅读
  5. springboot整合elasticsearch

    2024-02-08 22:56:02       44 阅读
  6. Spring状态机-待整理

    2024-02-08 22:56:02       48 阅读
  7. 【SQL高频基础题】610.判断三角形

    2024-02-08 22:56:02       42 阅读
  8. Docker安装ElasticSearch8.9.0

    2024-02-08 22:56:02       41 阅读
  9. CloudStack Agent重新安装与卸载指南

    2024-02-08 22:56:02       43 阅读
  10. C语言求数组中最大数的值

    2024-02-08 22:56:02       47 阅读
  11. HTTPS协议学习--一起学习技术干货之HTTPS

    2024-02-08 22:56:02       44 阅读
  12. 在Python中读写Kafka队列

    2024-02-08 22:56:02       44 阅读