关于指针、函数和数组混用后 ,声明如何解析的一点个人见解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

复杂的数组、函数、和指针的混合使用,无法声明和定义,这里告诉大家一下如何解析这种复杂的定义声明。


提示:以下是本篇文章正文内容,下面案例可供参考

一、指针声明和定义的逻辑

int *p = &a;

解析: 结合优先级 [ ]>* > 类型(int)
*p 先结合,说明p为指针
确定为指针之后,再进行结合
(*P)在和int结合,说明P指向int变量

二、数组声名和定义的逻辑

int arr[10]={0};

arr先和[10]结合,表明arr为数组
确定为数组之后, 删除之前结合过的所有字符 (即arr[10])之后,剩余为:数组元素类型:int。

三、函数声名和定义的逻辑

int p(int x int y)

解析:p先和(int x int y)结合,表明p为函数
确定为数组之后,删除之前结合过的所有字符 (即p(int x int y)之后,剩余为:数组元素类型:int。

四、指针数组

char *p[3] = {"abcd","cdef","aedr"};

解析:p先和【3】结合,说明p为数组。
确定为数组之后,删除 P[3],为char*,说明数组的元素类型为:char*

五、数组指针

char arr[10];
char (*p)[10] = &arr;

解析:p先和*结合,说明p为指针。
确定为指针后,进行下一步结合
(*P)和[10]结合,说明p指向一个数组,数组有10个元素
确定为数组之后,删除之前的结合的所有字符((*p)[10]),
为char,char则为该数组的元素类型。

六、函数指针

int (*P)(int int) = Add;

解析:p先和*结合,说明p为指针。
确定为指针后,进行下一步结合
(*P)和(int int ) 结合,说明p指向一个函数,数组有10个元素
确定为函数之后,删除之前的结合的所有字符(*p)(int x int y),剩余的字符表示函数返回类型。

七、例题解析

例题一:

int (*(*pf)[5])(int int)=&pfarr

解析:pf和*结合说明,pf为指针
确定为指针之后,再进行结合
(*P)和【5】结合,说明p指向数组
确定为数组之后,删除之前的结合的所有字符,剩余的字符为元素类型
int ( * )(int int) 即:数组的元素类型为函数指针

例题二:

int (*pf[ ])(int int)={Add,Sub,Mul}

pf先和【】结合,说明pf为数组。
确定为数组之后,删除之前的结合的所有字符,剩余的字符为元素类型
int (*)(int int) 即:数组的元素类型为函数指针

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,函数中可以用数组数组指针来传递和操作数组。下面是一个简单的示例代码: ```c #include <stdio.h> // 函数原型:使用数组作为参数 void printArray(int arr[], int size); // 函数原型:使用数组指针作为参数 void printArrayPointer(int* arr, int size); // 主函数 int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); // 调用函数,传递数组 printf("Printing array using array as parameter:\n"); printArray(arr, size); // 调用函数,传递数组指针 printf("\nPrinting array using array pointer as parameter:\n"); printArrayPointer(arr, size); return 0; } // 使用数组作为参数打印数组元素 void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } } // 使用数组指针作为参数打印数组元素 void printArrayPointer(int* arr, int size) { for (int i = 0; i < size; i++) { printf("%d ", *(arr + i)); } } ``` 上述代码中,定义了两个函数`printArray`和`printArrayPointer`来分别使用数组数组指针作为参数,打印数组元素。在`main`函数中,创建了一个整型数组`arr`并初始化,计算数组大小,并通过调用这两个函数来打印数组中的元素。 `printArray`函数使用数组作为参数,可以直接访问数组元素,使用`arr[i]`的形式来打印数组中的每个元素。 `printArrayPointer`函数使用数组指针作为参数,通过解引用指针来访问数组元素,使用`*(arr + i)`的形式来打印数组中的每个元素。 两种方式都可以达到相同的结果,但使用数组指针作为参数可以更灵活地在函数中操作数组,尤其在处理多维数组时更为方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值