区分几种指针

float (**def)[10]

def是一个二级指针,他指向的是一个一维数组的指针,数组元素都是float

double*(*gh)[10]

gh是一个指针,他指向一个一维数组,数组元素都是double*

double(*f[10])();

f是一个数组,他有10个元素,元素都是函数的指针,指向的函数类型是没有参数且返回double的函数

int*((*b)[10])

b是一维数组的指针,同gh

long (*fun)(int)

fun是函数指针

int(*(*F)(int,int))(int)

F是一个函数指针,返回值也是一个函数指针

### 数组中包含的指针变量数量分析 在讨论数组中包含多少个指针变量之前,需要明确两种概念:**指针数组** 和 **数组指针**。 #### 指针数组 指针数组是一种特殊的数组,其中每个元素都是一个指针。换句话说,这种数组存储的是多个指针变量。例如: ```c int *pointerArray[5]; ``` 在这个例子中,`pointerArray` 是一个长度为 5 的数组,每个元素都可以存储一个指向 `int` 类型数据的指针。因此,这个数组包含了 **5 个指针变量**[^2]。 #### 数组指针 数组指针则是用来指向整个数组的一个指针。它并不直接包含多个指针变量,而是仅仅表示一个单一的指针对象,该指针指向了一个完整的数组。例如: ```c int array[4] = {1, 2, 3, 4}; int (*arrayPointer)[4] = &array; ``` 在这里,`arrayPointer` 是一个指向包含 4 个整数的数组指针。尽管它可以间接访问数组中的所有元素,但它本身只包含 **1 个指针变量**[^5]。 --- ### 综合分析 如果要计算数组中具体包含了多少个指针变量,取决于所描述的对象是 **指针数组** 还是 **数组指针**: - 对于 **指针数组**,其包含的指针变量数目等于数组本身的大小(即元素的数量)。例如,`int *pointerArray[N];` 中有 N 个指针变量。 - 对于 **数组指针**,无论其所指向的数组有多大,该指针本身始终只是一个单独的指针变量。 --- ### 示例代码说明 以下是一段示例代码,展示如何区分这两种情况并统计指针变量的数量: ```c #include <stdio.h> int main() { // 定义一个指针数组 int values[] = {10, 20, 30, 40}; int *pointerArray[4]; for (int i = 0; i < 4; ++i) { pointerArray[i] = &(values[i]); } printf("指针数组 'pointerArray' 包含 %d 个指针变量。\n", sizeof(pointerArray)/sizeof(int*)); // 定义一个数组指针 int (*arrayPointer)[4] = &values; printf("数组指针 'arrayPointer' 自身仅包含 %d 个指针变量。\n", 1); return 0; } ``` 运行此程序将输出如下结果: ``` 指针数组 'pointerArray' 包含 4 个指针变量。 数组指针 'arrayPointer' 自身仅包含 1 个指针变量。 ``` --- ### 结论 综上所述,数组中包含的指针变量数量完全依赖于具体的定义方式。如果是 **指针数组**,则其包含的指针变量数目为其总元素数;而如果是 **数组指针**,则无论如何都只会有一个指针变量参与其中[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值