网页做得好的网站,全屏背景网站如何做到自适应,快速做网站公司哪家专业,北京哪里有网站建设设计欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab#xff0c;机器人运动控制、多机器人协作#xff0c;智能优化算法#xff0c;滤波估计、多传感器信息融合#xff0c;机器学习#xff0c;人工智能等相关领域的知识和技术。关… 欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab机器人运动控制、多机器人协作智能优化算法滤波估计、多传感器信息融合机器学习人工智能等相关领域的知识和技术。关注公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源 博主介绍 CSDN优质创作者CSDN实力新星CSDN内容合伙人 阿里云社区专家博主 华为云社区云享专家 51CTO社区入驻博主掘金社区入驻博主支付宝社区入驻博主博客园博主。 【数组指针与函数指针】 前言函数指针语法数组指针与指针数组 专栏《精通C语言》 前言
数组指针和函数指针都是C语言比较难的知识点尤其是函数指针并且函数指针在开发中有着巨大的作用。
函数指针语法
定义一个函数指针并通过函数指针间接调用函数
int get_num(int a, int b)
{return a b;
}int (*func)(int a, int b); //定义了一个函数指针func,它指向 返回值为int 参数为 int a, int b的函数func get_num; //函数指针指向函数func(1, 2); //通过函数指针调用函数通过定义一个函数指针类型来定义一个函数指针
typedef int (*func)(int a, int b); //定义了一个函数指针类型func func1 get_num; //使用函数指针类型func定义函数指针变量func1定义一个函数类型并使用函数类型来定义一个函数指针
typedef int (func)(int a, int b); //定义了一个函数类型
func* func1 get_num;func1(1, 1); //间接调用函数指针约定了函数的返回值和函数参数功能开发者只要根据这个约定实现功能函数就可以通过以函数指针为参数的统一接口进行调用来使用这个函数的功能实现了功能开发与功能使用的解耦合。这就是函数指针的巨大作用函数指针做函数参数 具体函数指针做函数参数的应用详解请看我的另一篇文章 回调函数 另外函数指针的正向调用使用场景比如通过把动态库加载到程序中在动态库中查找到函数入口地址来调用函数。
数组指针与指针数组
数组指针是指向数组的指针指针数组是指针的数组。 数组指针举例 #define _CRT_SECURE_NO_WARNINGS
#include stdlib.h
#include string.h
#include stdio.hvoid PrintArray_int(int* array, int len)
{if ((NULL array) || (len 0)){printf(err:(NULL array) || (len 0)\n);return;}for (int i 0; i len; i){//两种方法访问数组元素//printf( %d , array[i]);printf( %d , *(array i));}printf(\n);
}int main()
{//定义一个数组变量int num_array[10];// num_array 1 移动 sizeof(int) 个字节int len sizeof(num_array) / sizeof(num_array[0]);//memset(num_array, 0, sizeof(num_array) / sizeof(num_array[0])); //典型错误只把十个字节的内存值为0memset(num_array, 0, sizeof(num_array)); //实际应该把40个字节置为0PrintArray_int(num_array, sizeof(num_array) / sizeof(num_array[0]));//定义一个数组类型typedef int(array1_t)[];typedef int(array2_t)[10];array1_t a1 {1, 2, 3};array2_t a2;for (int i 0; i 10; i){a2[i] i;}PrintArray_int(a1, sizeof(a1) / sizeof(a1[0]));PrintArray_int(a2, 10);//定义一个数组指针int(*p_array)[10];// p_array 1 移动 sizeof(int) * 10 个字节p_array num_array;for (int i 0; i 10; i){(*p_array)[i] i 1;}PrintArray_int(*p_array, 10);//定义一个指向数组的指针类型数组指针typedef int(*p_array_t)[10];p_array_t p1 num_array;for (int i 0; i 10; i){(*p1)[i] i 2; //先解引用还原为一级指针数组本身可以看为一级指针//数组指针是指向数组的指针也就是指向一级指针的指针即二级指针}PrintArray_int((*p1), 10);//指针数组const char* p2[2] { aaa, bbb };//p2[0] 和 p2[1] 都是一个指针printf(%s\n, p2[0]);printf(%s\n, p2[1]);system(pause);return 0;
}