【C语言】带你彻底理解指针(1)
✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨
文章目录
- 指针的介绍:
- 一、简单指针🌈
- 1.1 指针的定义与使用
- 1.2 指针与数组
- 二、指针数组✨
- 三、数组指针🌞
- 3.1 数组指针的定义
- 3.2 ”数组名“与”&数组名“
- 3.3 数组指针使用
- 四、函数指针🤓
- 4.1函数指针的使用
- 五、函数指针数组🚀
- 5.1 函数指针数组的使用
- 完结
指针的介绍:
- 指针是一个用来存放地址的变量,可以通过指针存放的地址找到对应位置的值,对其进行使用。
- 指针在32位平台下的大小是4个字节,在64位平台下是8个字节。(这是因为32位平台下内存地址是由32根地址线组成,一根地址线就是1bit,用4个字节就可以存下,而64位平台有64根地址线,需要八个字节才可以存下)。
- 如果对指针进行加减与解引用操作,则±的步长与解引用操作的长度由指针类型决定,指针类型是几个字节±步长与解引用就是几个字节。
一、简单指针🌈
char* pc(字符指针)
int *pi(整形指针)
float* pf(浮点型指针)
还有short…double等等,拿部分举例。
1.1 指针的定义与使用
- 这三种指针的用法基本相同,只不过char*指针存放的是char变量地址,int型指针存放的是int变量地址,float指针存放的是float变量地址。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main()
{char a = 'a'; //定义一个char类型变量char* pa = &a; //*号先与pa结合说明pa是一个指针类型,指向的是char型数据的地址,将a的地址给到pa*pa = 'b'; //通过pa改变a的值printf("%c", a); // bint num = 10; int* pnum = #*pnum = 20;printf("%d", num);float f = 9.0;float* pf = &f;*pf = 5.0;printf("%d", f);
}
我们可以使用指针对指针指向的变量进行使用(修改或输出)。
1.2 指针与数组
- 数组名就是数组的首地址。
代码示例

- 得到数组首地址可以通过指针遍历数组
代码示例

二、指针数组✨
指针数组就是用来装指针的数组
int p1[]; //(方便理解拿整形数组对比)p1与[]结合说明p1是数组,装的是int类型的数据
int* p2[]; //[]优先级比*高 p2先与[]结合,说明p2是一个数组 里面装的是int*类型的数据
举个例子
#include <stdio.h>
int main()
{int a = 0;int b = 0;int c = 0;int* arr[3] = {&a,&b,&c}; //指针数组就是数组的每个位置都存储一个地址(指针)
}
三、数组指针🌞
3.1 数组指针的定义
数组指针与指针数组名字非常相似但是却截然不同,数组指针是一个指针,指针数组是一个数组
//对比一下指针数组和数组指针
int* pa[]; //这是指针数组,优先级问题,pa先与[]结合,说明pa是一个数组,装的是int*的数据
int (*pa)[] //这是数组指针,()优先级更高,pa先与*结合,说明pa是一个指针,指向一个int类型的数组
3.2 ”数组名“与”&数组名“
前面说了数组名代表数组首元素地址,那&数组名呢?
代码示例

- 对数组名与&数组名进行输出,发现地址一样

- 对数组名与&数组名+1,发现数组名加了四个字节,而&数组名加了十六进制的28,也就是十进制的40,为整个数组的大小。
结论:数组名与&数组名地址一样,但是数组名代表的是首元素地址,而&数组名代表的是整个数组。
3.3 数组指针使用
void print(int (*pa)[3])
{for(int i=0;i<2;i++){for(int j=0;j<3;j++){printf("%d",arr[i][j]);}}
}int main()
{int arr[2][3] = {0,1,2,3,4,5};print(arr); //二维数组首地址相当于 &(第一个一维数组)
}
四、函数指针🤓
函数指针就是指向函数的指针
-
函数指针的定义
-
- *函数返回值 (pa)(函数参数)
可以看作pa先与*结合,说明pa是个指针,指向一个函数
4.1函数指针的使用
代码示例
int add(int a,int b)
{return a+b;
}
int main()
{int (*pa)(int int) = add;int a = 3;int b = 4;printf("%d",pa(3,4)); //7
}
五、函数指针数组🚀
函数指针数组就是用来装函数指针的数组,需要注意每个函数指针数组的返回值和参数必须相同类型
-
函数指针数组的定义
-
- *函数返回值 (pa[])(函数参数)
可以看作pa先与[]结合说明pa是一个数组,每个位置装的是函数指针(地址)
5.1 函数指针数组的使用
#include <stdio.h>
int add(int a, int b) //需要注意函数指针数组的每个参数类型与返回值类型必须相同
{return a + b;
}
int sub(int a, int b)
{return a - b;
}
int mul(int a, int b)
{return a * b;
}
int div(int a, int b)
{return a / b;
}
void menu()
{printf("***************\n");printf(" 1:add 2:sub \n");printf(" 3:mul 4:div \n");printf(" 0:quit \n");printf("**************\n");
}
int main()
{int x = 0;int y = 0;int input = 0;int ret = 0;int(*p[5])(int x, int y) = { NULL, add, sub, mul, div };do{menu();printf("请选择:");scanf("%d", &input);if (input >= 1 && input <= 4){printf("输入两个数字:");scanf("%d %d", &x, &y);ret = (*p[input])(x, y);}else if (input == 0){break;}else{printf("请输入0-4的数字\n");continue;}printf("%d\n", ret);} while (input);
}

完结
创作不易,还请各位小伙伴多多点赞👍关注✨收藏⭐

相关文章:
【C语言】带你彻底理解指针(1)
✨✨✨✨如果文章对你有帮助记得点赞收藏关注哦!!✨✨✨✨ 文章目录指针的介绍:一、简单指针🌈1.1 指针的定义与使用1.2 指针与数组二、指针数组✨三、数组指针🌞3.1 数组指针的定义3.2 ”数组名“与”&数组名“3.…...
C/C++ 中 JSON 库的使用 (CJSON/nlohmann)
C/C 中 JSON 库的使用 (CJSON/nlohmann)概述cjson基本操作从(字符指针)缓冲区中解析出JSON结构转成成JS字符串(将传入的JSON结构转化为字符串)将JSON结构所占用的数据空间释放JSON 值的创建创建一个值类型的数据创建一个对象(文档)…...
【Opencv项目实战】目标检测:自动检测出现的所有动态目标
文章目录一、项目思路二、算法详解2.1、计算两个数组或数组与标量之间的每个元素的绝对差。2.2、轮廓检测 绘制物体轮廓 绘制矩阵轮廓2.3、连续窗口显示2.4、读取视频,显示视频,保存视频三、项目实战:实时动态目标检测实时动态目标检测一、…...
活动报名:Tapdata Cloud V3 最新功能全解与核心应用场景演示
作为中国的 “Fivetran/Airbyte”, Tapdata Cloud 自初版公测以来,已累积10,000 注册用户。核心场景包括 Any Source → Any Target 的实时数据库同步、数据入湖入仓,以及通用 ETL 处理等。近期,功能特性全面优化的 Tapdata Cloud V3 也已开放…...
人工智能AI威武,爱也……恨也……
人工智能AI威武,爱也!恨也!!它会创作会代码,从它那儿能仿到更好的思维;多它那里可以学到更好的代码。它聪慧全能,成为一坨人偷懒神器;变成“智者”作弊的“倚天屠龙”!&a…...
SpringBoot-基础篇
SpringBoot基础篇 在基础篇中,我给学习者的定位是先上手,能够使用SpringBoot搭建基于SpringBoot的web项目开发,所以内容设置较少,主要包含如下内容: SpringBoot快速入门SpringBoot基础配置基于SpringBoot整合SSMP…...
Tapdata Connector 实用指南:实时数仓场景之数据实时同步至 ClickHouse
【前言】作为中国的 “Fivetran/Airbyte”, Tapdata 是一个以低延迟数据移动为核心优势构建的现代数据平台,内置 60 数据连接器,拥有稳定的实时采集和传输能力、秒级响应的数据实时计算能力、稳定易用的数据实时服务能力,以及低代码可视化操作…...
刷题专练之数组移除元素
文章目录前言一、移除元素1.题目介绍2.思路:3.代码二、移动零1.题目介绍2.思路3.代码三、删除有序数组中的重复项1.题目介绍2.思想3.代码四、80. 删除有序数组中的重复项 II1.题目介绍2.思路3.代码4.推荐题解前言 我每个刷题篇的题目顺序都是特别安排的,…...
常见激活函数Activation Function的选择
Activation Function激活函数一般会神经网络中隐层和输出层上,其中作用在输出层主要用于适配输出,比如sigmoid函数可用于生成[0,1]之间的概率估计值。而作用于隐层主要用于增加神经网络的非线性,增加了网络的表达能力,本文主要介绍…...
大厂跟进ChatGPT,为什么百度“文心一言”成色最好?【快评】
作者 | 曾响铃 文 | 响铃说 赶ChatGPT热度,百度3月初就要发布与ChatGPT类似的人工智能聊天机器人服务“文心一言”(英文名:ERNIE Bot),似乎无法提振资本市场对百度的信心。 2022年第四季度及全年未经审计的财报发布…...
ChatGPT和Web3:人工智能如何帮助您建立和发展您的 Web3 公司
ChatGPT是OpenAI在2022年11月推出的聊天机器人。该机器人建立在OpenAI的GPT-3人工智能家族上,并通过监督学习和强化学习技术进行了优化。 与ChatGPT机器人聊天时,你会感觉自己在与一个懂得一切并以非常教育性的方式回答的朋友交谈。回答在许多知识领域非…...
【人工智能 AI】怎样实施RPA 机器人流程自动化(Robotic Process Automation)?核心技术有哪些?
文章目录 RPA 简介RPA的实施RPA的核心技术1. 自动化测试(1)自动化测试工具(2)自动化测试框架2. 自动化脚本(1)自动化脚本语言(2)自动化脚本框架3. 机器学习(1)机器学习模型(2)机器学习框架(3)自然语言处理(4)图像处理(5)深度学习(6)机器人操作系统RPA核心能…...
基于BP神经网络的性别识别,BP神经网络详细原理,自编码神经网络代码,神经网络案例之18
目标 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数, BP神经网络的传递函数 数据 神经网络参数 基于BP神经网络 性别识别的MATLAB代码 效果图 结果分析 展望 背影 男人体内蛋白质比例大,女生…...
2023年消费电子行业研究报告
第一章 行业概况 消费电子行业是电子信息行业的子行业。消费电子是指围绕着消费者应用而设计的与生活、工作和娱乐息息相关的电子类产品,通常会应用于娱乐、通讯以及文书用途,最终实现消费者自由选择资讯、享受娱乐的目的,主要侧重于个人购买…...
CSDN 编程竞赛三十一期题解
竞赛总览 CSDN 编程竞赛三十一期:比赛详情 (csdn.net) 本次竞赛的最后一道题的描述部分有些问题(题目描述与样例不符),另外,测试数据似乎也有点问题,试了多种方式,但最多只能通过10%的测试点。…...
SpringMVC常见面试题(2023最新)
目录前言1.简单介绍下你对springMVC的理解?2.说一说SpringMVC的重要组件及其作用3.SpringMVC的工作原理或流程4.SpringMVC的优点5.SpringMVC常用注解6.SpringMVC和struts2的区别7.怎么实现SpringMVC拦截器8.SpringMvc的控制器是不是单例模式?如果是,有什…...
【正点原子FPGA连载】第十六章DP彩条显示实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十六章DP彩条显…...
数据结构与算法—链表list
目录 链表 链表类型 链表插入 链表删除 写程序注意点 与数组区别 链表应用 LRU 实现思想 链表 链表,一种提高数据读取性能的技术,在硬件设计、软件开发中有广泛应用。常见CPU缓存,数据库缓存,浏览器缓存等。缓存满时&#…...
自定义View练习题目整理
一、动态音频播放柱形图 1、效果图: 2、步骤 (1)、新建自定义View类,继承View (2)、重写onDraw()方法,使用画笔和画布循环画一定数量的柱形 Overrideprotected void onDraw(Canvas canvas) {s…...
LAMP平台部署及应用
LAMP平台部署及应用 📒博客主页: 微笑的段嘉许博客主页 💻微信公众号:微笑的段嘉许 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! Ὄ…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
