int *p[n];- 这是一个指针数组。具体来说,
p是一个包含n个元素的数组,每个元素都是一个指向整型数据(int)的指针。 - 你可以想象成有一个数组,数组的每个位置都存储了一个地址,这些地址指向整型变量。
- 这是一个指针数组。具体来说,
int (*p)[n];- 这里,
p是一个指针,它指向一个包含n个整型数据的一维数组。 - 你可以想象成
p是一个地址,这个地址指向了一个数组的开始位置,而这个数组包含了n个整型数据。
- 这里,
int *p();- 这里,
p是一个函数,它返回一个指向整型数据的指针。 - 当你调用
p()时,它会返回一个地址,这个地址指向某个整型变量。
- 这里,
int (*p)();- 这里,
p是一个指针,它指向一个返回整型数据的函数。 - 你可以想象成
p是一个地址,这个地址指向了某个函数的开始位置,而这个函数会返回一个整型值。
- 这里,
为了更好地理解这些概念,你可以尝试编写一些简单的程序来演示它们的使用。比如:
对于第一个例子(指针数组):
#include <stdio.h> | |
int main() { | |
int a = 10, b = 20, c = 30; | |
int *p[3]; // 指针数组,可以存储3个指向int的指针 | |
p[0] = &a; | |
p[1] = &b; | |
p[2] = &c; | |
for (int i = 0; i < 3; i++) { | |
printf("%d\n", *p[i]); | |
} | |
return 0; | |
} |
对于第二个例子(指向数组的指针):
#include <stdio.h> | |
int main() { | |
int arr[3] = {10, 20, 30}; | |
int (*p)[3]; // 指向包含3个int的数组的指针 | |
p = &arr; // 指向arr数组 | |
for (int i = 0; i < 3; i++) { | |
printf("%d\n", (*p)[i]); | |
} | |
return 0; | |
} |
以此类推,你可以尝试编写程序来演示其他两个例子的用法。