- 任意的数组,不管有多复杂,其定义都由两部分组成。
- 第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