当前位置: 首页 > news >正文

数组指针、函数指针、指针数组、函数 指针数组、指针函数详细总结

1.数组指针概念和应用

首先数组指针应该是一个数组,它的定义如下:

数组指针,指的是数组名的指针,即数组首元素地址的指针。即是指向数组的指针。例:int (*p)[10]; p即为指向数组的指针,又称数组指针。

数组指针一般应用在二维数组上面

数组指针应用编程示例:

#include <stdio.h>int main()
{int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};int i,j;int (*p)[4];p = arr;for(i=0;i<3;i++){for(j=0;j<4;j++){//p为二维数组首地址,*(p+i)为存放二维数组首地址,(*(p+i)+j)为            //存放一维数组首地址,*(*(p+i)+j)为取地址中的值printf("%d\n",*(*(p+i)+j));}}return 0;
}

2.函数指针概念和应用

如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针。

强调:函数名跟数组名都是地址

函数指针应用编程示例:

#include <stdio.h>void input(int *p1,int *p2)
{printf("please input row/column\n");scanf("%d%d",p1,p2);printf("input success\n");
}int getdata(int (*p)[4],int row,int column)
{int data;data = *(*(p+row)+column);return data;
}int main()
{int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};int row,column;int (*p)[4];int data;p = arr;input(&row,&column);data = getdata(arr,row,column);printf("%drow %dcolumn data = %d\n",row+1,column+1,data);return 0;
}

函数指针与数组指针应用编程示例:

#include <stdio.h>void input(int *p1,int *p2)
{printf("please input row/column\n");scanf("%d%d",p1,p2);printf("input success\n");
}int getdata(int (*p)[4],int row,int column)
{int data;data = *(*(p+row)+column);return data;
}int main()
{int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};int row,column;int (*p)[4];int data;p = arr;void (*pa)(int *p1,int *p2);int (*pb)(int (*)[4],int row,int column);pa = input;pb = getdata;(*pa)(&row,&column);data = (*pb)(arr,row,column);printf("%drow %dcolumn data = %d\n",row+1,column+1,data);return 0;
}
#include <stdio.h>int getmax(int a,int b)
{return a>b ? a:b;
}
int getmin(int a,int b)
{return a<b ? a:b;
}
int getsum(int a,int b)
{return a+b;
}
int getdata(int a,int b,int (*p)(int ,int ))
{int data;data = (*p)(a,b);return data;
}int main()
{int a = 10;int b = 20;int cmd;int ret;int (*p)(int ,int );printf("please input 1 getmax/2 getmin/3 getsum\n");scanf("%d",&cmd);switch(cmd){case 1:p = getmax;break;case 2:p = getmin;break;case 3:p = getsum;break;}ret = getdata(a,b,p);printf("end is %d\n",ret);return 0;
}

3.指针数组

一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。下面定义一个指针数组:
int *p[4];
由于[ ]比*优先级高,因此p先与[4]结合,形成p[4]形式这显然是数组形式表示p数组有4个元素。然后再与p前面的“* ”结合,“*”表示此数组是指针类型的,每个数组元素(相当于一个指针变量)都可指向一个整型变量。
注意不要写成
int(*p)[4];
//这是指向一维数组的指针变量,是上面讲到过的函数指针
定义一维指针数组的一般形式为
类型名*数组名[数组长度];
类型名中应包括符号“*”,如“int*”表示是指向整型数据的指针类型

指针数组应用编程示例:

#include <stdio.h>int main()
{int a = 1;int b = 2;int c = 3;int d = 4;int* p[4] = {&a,&b,&c,&d};int i;for(i=0;i<4;i++){printf("the num is = %d\n",*p[i]);}return 0;
}

4.函数指针数组

函数指针数组,顾名思义跟上述函数指针一样,只不过是函数指针 与 指针数组 相结合

函数指针数组应用编程示例:

#include <stdio.h>int getmax(int a,int b)
{return a>b ? a:b;
}
int getmin(int a,int b)
{return a<b ? a:b;
}
int getsum(int a,int b)
{return a+b;
}int main()
{int a = 10;int b = 20;int i;int ret;int (*p[3])(int ,int ) = {getmax,getmin,getsum};for(i=0;i<3;i++){ret = (*p[i])(a,b);printf("ret = %d\n",ret);}return 0;
}

5.指针函数

一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址。其概念与以前类似,只是返回的值的类型是指针类型而已
例如“int *a(int x,inty);”,a是函数名调用它以后能得到一个int*型(指向整型数据)的指针,即整型数据的地址。x和y是函数a的形参为整型。
请注意在 * a 两侧没有括号,在 a 的两侧分别为* 运算符和()运算符。而()优先级高于*,因此a先与()结合,显然这是函数形式。这个函数前面有一个 *表示此函数是指针型函数(函数值是指针)。最前面的 int 表示返回的指针指向整型变量。

#include <stdio.h>int* getscore(int a,int (*arr)[4])
{int *p;p = (int*)(a+arr);return p;
}int main()
{int score[3][4] = {{1,2,3,4},{5,6,7,8},{1,3,5,7}};int a;int i;int *p;printf("please input 0/1/2\n");scanf("%d",&a);p = getscore(a,score);for(i=0;i<4;i++){printf("score is = %d\n",*p++);}return 0;
}

相关文章:

数组指针、函数指针、指针数组、函数 指针数组、指针函数详细总结

1.数组指针概念和应用 首先数组指针应该是一个数组&#xff0c;它的定义如下&#xff1a; 数组指针&#xff0c;指的是数组名的指针&#xff0c;即数组首元素地址的指针。即是指向数组的指针。例&#xff1a;int (*p)[10]; p即为指向数组的指针&#xff0c;又称数组指针。 数…...

Linux存储学习笔记

相关文章 Linux 存储系列&#xff5c;请描述一下文件的 io 栈&#xff1f; - tcpisopen的文章 - 知乎 https://zhuanlan.zhihu.com/p/478443978 深入学习 Linux 操作系统的存储 IO 堆栈 - KaiwuDB的文章 - 知乎 https://zhuanlan.zhihu.com/p/636720297 linux存储栈概览 - st…...

ubuntu执行jmeter端口不够用报错(Address not available)

ubuntu执行jmeter端口不够用报错(Address not available) 解决方案 // 增加本地端口范围 echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range// 启用快速回收TIME_WAIT套接字 sudo sysctl -w net.ipv4.tcp_tw_recycle 1// 启用套接字的重用 sudo sysctl -w net.ipv4…...

MongoDB:简单的增删改查操作

一.概述 本篇文章介绍在Navicat中对MongoDB数据库进行增删改查操作,在后面会介绍在Spring Boot中使用MongoTemplate对MongoDB数据库进行相关操作.如有必要可以先看看前面几篇文章. MongoDB:MySQL,Redis,ES,MongoDB的应用场景 MongoDB:数据库初步应用 二.在Navicat进行增删改…...

网络编程(域套接字)

一、域套接字的概念 1.只能做一台主机内的进程间通信&#xff0c;协议族&#xff08;地址族&#xff09;指定为&#xff1a;AF_UNIX AF_LOCAL 2.bsp-lcd&#xff1a; s类型文件&#xff0c;就是域套接字 3.如果客户端不手动绑定&#xff0c;则操作系统不会创建一个套接字文件…...

探索短视频小程序/小年糕

短视频小程序的兴起&#xff0c;为创作者提供了一个全新的平台&#xff0c;让他们能够以更专业的方式展现自己的作品。这种创作形式不仅要求作品内容足够精彩还需要有深度的思考和逻辑性的呈现。本文将探索短视频小程序的专业与深度的创作之道&#xff0c;帮助创作者更好地发挥…...

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 7 Function callers标签页介绍

不知不觉这个code-mapping专题已经写了6篇文章了,今天是我们这个专题的最后一篇文章了介绍Function callers 这个其实很简单,以前的文章里也有提到CS接口实现两个SWC之间的CS调用,我们在从Code-mapping的角度在说下 首先还是看下模型 我们还记得在simulink里我们用function…...

ARM开发(cortex-A7核中断实验)

1.实验目的&#xff1a;实现KEY1/LEY2/KE3三个按键&#xff0c;中断触发打印一句话&#xff0c;并且灯的状态取反&#xff1b; key1 ----> LED3灯状态取反&#xff1b; key2 ----> LED2灯状态取反&#xff1b; key3 ----> LED1灯状态取反&#xff1b; 2.分析框图: …...

关于融合项目点云pointpillars检测不显示三维检测框问题的解决

这个问题主要还是launch文件中出现了一些偏差。 launch文件的第26行 这里原先是0.6&#xff0c;在检测kitti的时候是0.6&#xff0c;由于kitti是64线激光雷达&#xff0c;我个人用的是16线激光雷达&#xff0c;所以把0.6降到了0.2.出现了三维检测框&#xff0c;问题解决...

spring复习:(57)PropertyOverrideConfigurer用法及工作原理

一、属性配置文件 dataSource.urljdbc:mysql://xxx.xxx.xxx.xxx/test dataSource.usernameroot dataSource.passwordxxxxxx dataSource.driverClassNamecom.mysql.jdbc.Driver #dataSource.typecom.alibaba.druid.pool.DruidDataSource二、spring配置文件 <?xml version&…...

在axios中获取文件上传进度

1.在axios 全局配置的文件中加入一个postFile 方法在上传文件时调用。 export function postFile(url, params,config) {return new Promise((resolve, reject) > {axios.post(url, params,config).then(res > {resolve(res);}).catch(err > {reject(err);})}) } 2.…...

黑马头条-kafka配置

生产者配置 NAMEDESCRIPTIONTYPEDEFAULTVALID VALUESIMPORTANCEbootstrap.servershost/port列表&#xff0c;用于初始化建立和Kafka集群的连接。列表格式为host1:port1,host2:port2,…&#xff0c;无需添加所有的集群地址&#xff0c;kafka会根据提供的地址发现其他的地址&…...

PMP P-01 Basic Knowledge

PMP基础知识...

java八股文面试[数据结构]——ArrayList和LinkedList区别

ArrayList和LinkedList的异同 二者的线程都不安全&#xff0c;相对线程安全的Vector,执行效率高。此外&#xff0c;ArrayList时实现了基于动态数组的数据结构&#xff0c;LinkedList基于链表的数据结构&#xff0c;对于随机访问get和set&#xff0c;ArrayList觉得优于LinkedLis…...

OpenCV中QR二维码的生成与识别(CIS摄像头解析)

1、QR概述 QR(Quick Response)属于二维条码的一种&#xff0c;意思是快速响应的意思。QR码不仅信息容量大、可靠性高、成本低&#xff0c;还可表示汉字及图像等多种文字信息、其保密防伪性强而且使用非常方便。更重要的是QR码这项技术是开源的&#xff0c;在移动支付、电影票、…...

常见排序集锦-C语言实现数据结构

目录 排序的概念 常见排序集锦 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 hoare 挖坑法 前后指针法 非递归 7.归并排序 非递归 排序实现接口 算法复杂度与稳定性分析 排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#…...

css 实现四角边框样式

效果如图 此图只实现 左下与右下边角样式 右上与左上同理 /* 容器 */ .card-mini {position: relative; } /* 左下*/ .card-mini::before {content: ;position: absolute;left: 0;bottom: 0;width: 20px;height: 20px;border-bottom: 2px solid #253d64;border-left: 2px so…...

机器学习深度学习——自注意力和位置编码(数学推导+代码实现)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——注意力分数&#xff08;详细数学推导代码实现&#xff09; &#x1f4da;订阅专栏&#xff1a;机器学习…...

02.案列项目Demo

1.创建项目 1. 创建项目 用pycharm 选择对应的编译器&#xff0c;输入对应的文件名&#xff0c;点击创建项目。删除默认外层生成的template和DIRS 配置项&#xff1a; 2. 创建App 创建appo1的命令&#xff1a; python manage.py startapp app01 如果使用pycharm>tool>…...

PDF校对:追求文档的精准与完美

随着数字化时代的到来&#xff0c;PDF已经成为了多数机构和个人首选的文件格式&#xff0c;原因在于它的稳定性、跨平台特性以及统一的显示效果。但是&#xff0c;对于任何需要公开或正式发布的文档&#xff0c;确保其内容的准确性是至关重要的&#xff0c;这就是PDF校对显得尤…...

字节跳动“卷”到离谱!裸辞后我投身大模型风口,90天逆袭成“AI小子”!

个人自我介绍 鄙人出生于南方小乡镇&#xff0c;为了走出小镇&#xff0c;在当地够拼够努力&#xff0c;不是自夸&#xff0c;确确实实也算得上“别人家的小孩”&#xff0c;至少在学习这件事情少&#xff0c;没有要家里人操过心。 高考特别顺利&#xff0c;一个老牌985&#x…...

零基础学习数据库:用快马AI生成你的第一个可操作图书管理系统

作为一个刚接触数据库的小白&#xff0c;最近在InsCode(快马)平台上尝试做了一个图书管理系统项目&#xff0c;整个过程意外地顺利。这里记录下我的学习心得&#xff0c;希望能帮到同样零基础的朋友们。 为什么选择图书管理系统作为入门项目 图书管理系统包含了数据库最基础的…...

3步实现PDF文献自动化管理:Zotero Reference插件新手入门指南

3步实现PDF文献自动化管理&#xff1a;Zotero Reference插件新手入门指南 【免费下载链接】zotero-reference PDF references add-on for Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-reference 一、价值定位&#xff1a;为什么选择Zotero Reference …...

别再死磕EKF了!用ESKF搞定无人机姿态估计,避开‘大数吃小数’的坑

无人机姿态估计实战&#xff1a;用ESKF避开EKF的数值陷阱 四轴飞行器在高速翻滚时&#xff0c;IMU数据突然出现剧烈抖动——这是去年调试自主无人机时遇到的真实场景。当时使用传统EKF算法&#xff0c;姿态解算在极端机动下频繁发散&#xff0c;直到切换到误差状态卡尔曼滤波&a…...

NCMconverter完整指南:3步解锁NCM音乐文件的终极播放方案

NCMconverter完整指南&#xff1a;3步解锁NCM音乐文件的终极播放方案 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 你是否曾经遇到过这样的情况&#xff1a;从音乐平台下载了心…...

AnimateDiff文生视频零基础入门:5分钟学会用文字生成动态GIF

AnimateDiff文生视频零基础入门&#xff1a;5分钟学会用文字生成动态GIF 1. 为什么选择AnimateDiff作为文生视频的起点&#xff1f; 如果你曾经尝试过AI视频生成工具&#xff0c;可能会被复杂的操作流程和硬件要求劝退。传统方案往往需要你先准备一张静态图片&#xff0c;再通…...

ResNet18物体识别在内容审核中的应用:快速过滤与分类图片

ResNet18物体识别在内容审核中的应用&#xff1a;快速过滤与分类图片 1. 内容审核的挑战与解决方案 在当今数字内容爆炸式增长的时代&#xff0c;内容审核已成为平台运营的关键环节。每天都有海量的图片需要被快速准确地分类和过滤&#xff0c;传统人工审核方式已无法满足需求…...

感性负载续流二极管设计与选型指南

1. 感性负载驱动电路中的续流二极管设计1.1 电感特性与瞬态响应电感作为基础电子元件&#xff0c;其核心特性是阻碍电流变化。当恒定电流通过电感时&#xff0c;它表现为普通导线&#xff1b;但当电流变化时&#xff0c;电感会产生感应电动势(EMF)来抵抗这种变化。在电路断开瞬…...

计算机毕业设计:美食推荐系统设计与协同过滤算法实现 Django框架 爬虫 协同过滤推荐算法 可视化 推荐系统 数据分析 大数据(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝50W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战8年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

ClickHouse 3节点集群配置与分布式表实战指南

1. ClickHouse集群基础概念解析 第一次接触ClickHouse集群时&#xff0c;我被各种术语绕得头晕——分片、副本、分布式表、本地表&#xff0c;这些概念到底有什么区别&#xff1f;后来在实际项目中踩过几次坑才真正理解它们的含义。简单来说&#xff0c;**分片&#xff08;Shar…...