(C语言)指针与指针数组的使用教学(C语言基础教学)(指针教学)
指针是什么?指针怎么用?指针数组又是什么???
想必大家刚学C语言的时候对指针可谓是十分头疼了,听也听不懂,用也不会用
下面我来用我的理解来教你指针怎么用,还你一个脑子
1.指针的声明
声明指针时,需要指定它所指向的数据类型,并在变量名前加上*。
例如:
int *p; // p 是一个指向 int 类型变量的指针2.取地址运算符 &
& 用于获取变量的内存地址。
例如:
int a = 10;
int *p = &a; // p 存储了变量 a 的地址
注:上面可以看到(a=10),这里是把a的地址传给p指针
细心的同学可能发现:诶?scanf函数不也是&这个符合吗?确实,其实scanf函数获得输入的地址来实现的
对于指针的声明其实还有个写法:
3.指针的另一种声明
例如:
int* p;
这个写法和上面的一样,但是可以更直观的看到,p就是指针!后续所有的p都是指针,*p是解引用,是p指针里面存储的内容
4. 解引用运算符 *
* 用于访问指针所指向地址的值。
例如:
int a = 10;
int *p = &a;
int b = *p; // b 现在等于 10,因为 *p 访问了 p 所指向的 a 的值
第4个,所以这就是*p的作用。
5. 指针的初始化
指针在使用前应初始化,未初始化的指针可能指向无效地址,导致程序崩溃。
例如:
int *p = NULL; // 初始化为 NULL,表示不指向任何地址6. 指针的运算
指针可以进行加减运算,移动指向的内存地址。
例如:
int arr[3] = {10, 20, 30};
int *p = arr; // p 指向数组的第一个元素
p++; // p 现在指向数组的第二个元素
第5个的初始化,不仅仅是一个习惯,是必要,定义指针是一定要初始化的,不然有可能会发生不好的事情
对于第6个,指针只可以进行加减,加运算就是当前指针地址加一,减法同理,一定注意指针是不能乘除的!
7. 指针与数组
数组名本身就是一个指针,指向数组的第一个元素。
例如:
int arr[3] = {10, 20, 30};
int *p = arr; // p 指向数组的第一个元素8. 指针与函数
指针可以作为函数参数,传递变量的地址,以便在函数中修改原变量。
例如:
void increment(int *p) {(*p)++; // 修改 p 所指向的变量的值
}int main() {int a = 10;increment(&a); // 传递 a 的地址printf("%d\n", a); // 输出 11return 0;
}9. 指针的指针
指针也可以指向另一个指针。
例如:
int a = 10;
int *p = &a;
int **pp = &p; // pp 是一个指向指针 p 的指针10. 动态内存分配
使用 malloc 和 free 进行动态内存分配和释放。
例如:
int *p = (int *)malloc(sizeof(int)); // 分配一个 int 大小的内存
*p = 10;
free(p); // 释放内存
第7个,指针和指针数组几乎没有太大的差别,你就把指针看成一个空间块,里面可以存储一个数或者一堆数就行了
第8个注意,传递地址时,不要忘了&符号
第9个指针的指针也就是双重指针,就是定义一个大的白盒子把第一次定义的小黑盒子裹住一样,俄罗斯套娃,这个的应用就是在你使用指针时,想把这个指针一整个的运用才使用双重指针:
(C语言)给出一个区间,写出区间内所有的质数(指针数组解答)(双指针用法)-CSDN博客
在这条博客里,我使用了双指针,感兴趣的同学可以去看看
关于第10条动态分配,使用非常广泛,有数组的地方就有这个,搭配头文件stdlib.h使用分配malloc函数,或者使用重新分函数realloc函数,最后记得释放即可
(C语言)字符串反转函数(指针,递归解法)-CSDN博客
这篇博客,使用了malloc和realloc,其实,realloc更多的是防止垃圾值
说了这么多,有小伙伴可能还有点疑惑,那指针到底怎么用???
你只需要知道一点,使用指针的目的就是让局部变量成为全局变量,比如在main函数中a=10;我想在fun函数中也让a=10,怎么办?用指针,怎么用?先声明,然后传递地址就行,如:
#include <stdio.h>
//定义计算所需要的函数
void fun(int *size1,int *size2,int *size3){//确保输入的区间正确(例:用户输入9 3,给他改成3 9)//否则for不能运行if(*size1 >*size2){int *t=size1;size1=size2;size2=t;}//计算区间内每个数是否为c的倍数for(int i=*size1;i<*size2+1;i++){if (i%*size3==0){printf("%d是%d的倍数\n",i,*size3);}}
}
int main(){int a=0,b=0,c=0;printf("请输入一个区间:\n");//检验scanf是否合法;输入两个整数所以用2来判断if (scanf("%d %d",&a,&b)!=2){printf("输入的不是有效数字!");return 1;}printf("请输入倍数:\n");检验scanf是否合法;输入一个整数所以用1来判断if (scanf("%d",&c)!=1){printf("输入的不是有效数字!");return 1;}fun(&a,&b,&c);return 0;
}
对于博客:
(C语言)定义一个区间输出该区间内为某个数的倍数的数(指针解法)-CSDN博客
本期博客就到这里,总结,指针就是让局部变量变成全局变量的方法
下面这篇博客,就用了局部变量变成全局变量才实现代码的!!
(C语言小项目)猜字游戏(正式版)_字谜游戏goc程序-CSDN博客
注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!
相关文章:
(C语言)指针与指针数组的使用教学(C语言基础教学)(指针教学)
指针是什么?指针怎么用?指针数组又是什么??? 想必大家刚学C语言的时候对指针可谓是十分头疼了,听也听不懂,用也不会用 下面我来用我的理解来教你指针怎么用,还你一个脑子 1.指针的…...
【算法day13】最长公共前缀
最长公共前缀 https://leetcode.cn/problems/longest-common-prefix/submissions/612055945/ 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 class Solution { public:string longestCommonPrefix(vector<string&g…...
Effective C++ 剖析(条款1~9)
目录 条款01 视C为一个语言联邦(C由几部分组成) 条款02 尽量以 const,enum,inline 替换 #define 条款03 尽量使用 const 条款04 确定对象再使用前已经被初始化 条款05 了解c默默编写并调用那些函数 条款06 若不想使用编译器自动生成的函数就该明确拒绝 条款07 为多态基类…...
【Maven-plugin】有多少官方插件?
之前疏理了容器底层原理,现在回归主题,在阅读 next-public时发现 parent 将从多基础插件集成到 parent 仓库中单独维护,数量众多,故在此将所有插件分类整理。以达观其全貌,心中有数。 以下是 Apache Maven 官方维护的核心插件列表…...
Java高频面试之集合-13
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:为什么 hash 函数能降哈希碰撞? 哈希函数通过以下核心机制有效降低碰撞概率,确保不同输入尽可能映…...
RGV调度算法(三)--遗传算法
1、基于时间窗 https://wenku.baidu.com/view/470e9fd8b4360b4c2e3f5727a5e9856a57122693.html?_wkts_1741880736197&bdQuery%E7%8E%AF%E7%A9%BF%E8%B0%83%E5%BA%A6%E7%AE%97%E6%B3%95 2.2019年MathorCup高校数学建模挑战赛B题 2019-mathorcupB题-环形穿梭机调度模型&a…...
【数学建模】一致矩阵的应用及其在层次分析法(AHP)中的性质
一致矩阵在层次分析法(AHP)中的应用与性质 在层次分析法(AHP)中,一致矩阵是判断矩阵的一种理想状态,它反映了决策者判断的完全合理性和一致性,也就是为了避免决策者认为“A比B重要,B比C重要,但是C又比A重要”的矛盾。…...
YOLOv8轻量化改进——Coordinate Attention注意力机制
现在针对YOLOv8的架构改进越来越多,今天尝试引入了Coordinate Attention注意力机制以改进对小目标物体的检测效率。 yolov8的下载和安装参考我这篇博客: 基于SeaShips数据集的yolov8训练教程_seaships处理成yolov8-CSDN博客 首先我们可以去官网找到CA注…...
php开发转go的学习计划及课程资料信息
以下是为该课程体系整理的配套教材和教程资源清单,包含书籍、视频、官方文档和实战项目资源,帮助你系统化学习: Go语言学习教材推荐(PHP开发者适配版) 一、核心教材(按学习阶段分类) 1. 基础语法阶段(阶段一) 资源类型名称推荐理由链接/获取方式官方教程Go语言之旅交…...
解释 TypeScript 中的枚举(enum),如何使用枚举定义一组常量?
枚举(Enum) 是 TypeScript 中用于定义一组具名常量的核心类型,通过语义化的命名提升代码可读性,同时利用类型检查减少低级错误。 以下从定义方式、使用建议、注意事项三方面深入解析。 一、枚举的定义方式 1. 数字枚举 特性&…...
基于SpringBoot+Vue的驾校预约管理系统+LW示例参考
1.项目介绍 系统角色:管理员、普通用户、教练功能模块:用户管理、管理员管理、教练管理、教练预约管理、车辆管理、车辆预约管理、论坛管理、基础数据管理等技术选型:SpringBoot,Vue等测试环境:idea2024,j…...
ONNX:统一深度学习工作流的关键枢纽
引言 在深度学习领域,模型创建与部署的割裂曾是核心挑战。不同框架训练的模型难以在多样环境部署,而 ONNX(Open Neural Network Exchange)作为开放式神经网络交换格式,搭建起从模型创建到部署的统一桥梁,完…...
蓝桥杯————23年省赛 ——————平方差
3.平方差 - 蓝桥云课 一开始看题我还没有意识到问题的严重性 我丢,我想 的是用两层循环来做,后来我试了一下最坏情况,也就是l1 r 1000000000 结果运行半天没运行出来,我就知道坏了,孩子们,要出事&#…...
一、串行通信基础知识
一、串行通信基础知识 1.处理器与外部设备通信有两种方式 并行通信:数据的各个位用多条数据线同时传输。(传输速度快,但占用引脚资源多。) 串行通信:将数据分成一位一位的形式在一条数据线上逐个传输。(线路…...
自带多个接口,完全免费使用!
做自媒体的小伙伴们,是不是经常为语音转文字的事儿头疼? 今天给大家推荐一款超实用的语音转文字软件——AsrTools,它绝对是你的得力助手! AsrTools 免费的语音转文字软件 这款软件特别贴心,完全免费,而且操…...
大数据学习(70)-大数据调度工具对比
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
Qt QML解决SVG图片显示模糊的问题
前言 在QML中直接使用SVG图片,使用Image控件加载资源,显示出来图片是模糊的,很影响使用体验。本文介绍重新绘制SVG图片,然后注册到QML中使用。 效果图: 左边是直接使用Image加载资源显示的效果 右边是重绘后的效果 …...
【Linux我做主】基础命令完全指南上篇
Linux基础命令完全指南【上篇】 Linux基础命令完全指南github地址前言命令行操作的引入Linux文件系统树形结构的根文件系统绝对路径和相对路径适用场景Linux目录下的隐藏文件 基本指令目录和文件相关1. ls2. cd和pwdcdpwd 3. touch4. mkdir5. cp6. mv移动目录时覆盖写入的两种特…...
Designing Dashboards with SAP Analytics Cloud
Designing Dashboards with SAP Analytics Cloud...
项目实战系列:基于瑞萨RA6M5构建多节点OTA升级-系统设计<一>
项目背景 原嵌入式控制系统采用分布式模块化架构,由12个功能板卡(通信控制、信号采集、驱动执行等)组成。系统维护阶段存在以下痛点: 低效的本地烧录机制:各板卡固件升级需通过JTAG接口逐一手动连接JLINK仿真器&#x…...
hadoop集群配置-scp拓展使用
进行文件的拷贝:...
《AI大模型趣味实战》 No3:快速搭建一个漂亮的AI家庭网站-相册/时间线/日历/多用户/个性化配色/博客/聊天室/AI管家(下)
《AI大模型趣味实战》 No3:快速搭建一个漂亮的AI家庭网站-相册/时间线/日历/多用户/个性化配色/博客/聊天室/AI管家(下) 摘要 本文介绍了家庭网站V1.3版本的更新内容,主要聚焦于AI管家功能的优化与完善。V1.3版本对AI管家模块进行了全面升级࿰…...
华为OD机试 - 创建二叉树(Java 2024 E卷 200分)
题目描述 给定一系列树状结构操作的问题,通过 Q 次查询还原树结构并输出结果。题目要求实现一个类 Solution,其方法 recoverTree 需要根据输入的操作数组 operations 还原树的结构,并返回树的根节点。每个操作 operations[i] [height, inde…...
c++基础知识-图论进阶
一、拓扑排序 1、基础知识 1)什么是拓扑排序 对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若,则u在线性序列中出现在v之前。 2)拓扑排序的操作方法 重复执行…...
[Java实战]Spring Boot服务CPU 100%问题排查:从定位到解决
Spring Boot服务CPU 100%问题排查:从定位到解决 1. 引言 当Spring Boot服务出现CPU占用率100%时,系统性能会急剧下降,甚至导致服务不可用。本文将通过真实代码案例,详细讲解如何快速定位问题根源,并提供解决方案。无…...
1.6 极限存在准则
1.夹逼定理(迫敛定理) 1.1 数列型 1.1.1 准则 1.2 函数型 2. 两个重要极限...
Fisher信息、梯度方差与学习率调度器的计算流程
Fisher信息、梯度方差与学习率调度器的计算流程 目录 Fisher信息、梯度方差与学习率调度器的计算流程**步骤1:定义模型与数据集****步骤2:计算梯度与Fisher信息****步骤3:计算梯度方差****步骤4:定义学习率调度器****步骤5:参数更新流程****示例输出****关键概念说明**步骤…...
Model Context Protocol 的生命周期
生命周期阶段 生命周期分为三个主要阶段: 初始化阶段 (Initialization) 客户端与服务器建立协议版本兼容性。交换并协商能力。分享实现细节。客户端必须发送 initialize 请求,包含支持的协议版本、客户端能力和客户端实现信息。服务器必须响应其自身能力…...
Go语言中的错误处理与异常恢复:性能对比与实践思考
Gone是一款轻量级Go依赖注入框架,通过简洁的标签声明实现自动组件管理。它提供零侵入设计、完整生命周期控制和极低运行时开销,让开发者专注于业务逻辑而非依赖关系处理。 项目地址: https://github.com/gone-io/gone 文章目录 Go的错误处理哲…...
CSS 属性选择器详解
CSS 属性选择器详解 引言 CSS(层叠样式表)是网页设计中的重要组成部分,它用于控制网页元素的样式和布局。属性选择器是CSS选择器的一种,它允许开发者根据元素的特定属性来选择和样式化元素。本文将详细讲解CSS属性选择器的概念、语法以及常用属性选择器的使用方法。 一、…...
