百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

知识分享:C语言知识干货系列——指针篇

haoteby 2025-02-21 13:26 23 浏览

谈到指针,我们可能会想到钟表上的指针,但这里的指针不是现实生活中看得见摸得着的钟表上的指针,c 语言中的指针只存在于逻辑思维中,物理上并不存在。

同时,指针也是C 语言中最精华的部分,通过灵活地运用指针,可以写出独具匠心、构思巧妙的程序。

指针基础

c 语言中指针的实质就是地址

内存地址

对于计算机中的内存,都会以字节为单位,逐一地编上号码,这个编号就是内存的地址,如下图:

图中,按字节给内存依次编上了号码,其中每个数字对应着1个字节的内存空间,而数字就是内存的地址。

取地址运算符"&"

C 语言中,可以用"&"符号来获取一个变量的内存地址。只要在变量名前加上"&"符号就可以获取变量名所表示的内存地址。当获取到变量的内存地址后,就相当于得到了一个指向该变量的指针。简单地总结一下:

&变量名 == 该变量的内存地址 == 指向该变量的指针

解引用运算符“*”

既然可以通过取地址符获取一个指向变量的指针。那怎么通过这个指针再找回原来的变量呢?

这时候就有了一个和取地址相逆的操作,我们把它称为解引用,解引用需要用到星号“ * ”,它的使用格式为:

*指针

另外,C 语言中,还允许定义专门用于存储内存地址类型的变量,我们将其称为地址变量,又被称为指针变量。

指针、指针变量与内存地址小区分

首先内存地址是内存单元的一个编号,可以把它当成一个常量看待;指针变量是一个能够存放内存地址的容器,它是一个变量;指针是无形的,我们可以把它想象成一个带箭头的长线,线尾连着指针变量,而箭头指向了指针变量所保存的内存地址处的数据


指针进阶浅谈

由于指针学起来涉及的内容比较多,难度相比其他的也较大,所以下面我只是简单地谈一谈指针变量、指针与数组,指针与字符串、指针与函数、二级指针,权且当做给大家提个醒,理一理逻辑,要具体学习还得自己再编程实战中去体悟。

1,指针变量

指针变量也是变量的一种,但它与普通变量有所不同,普通变量存储的是数据,指针变量存储的是内存地址。

//指针变量的定义格式
数据类型 *变量名;

定义指针变量后,不要直接去使用,因为使用赋予确定内存地址的"定义指针"可能会出大问题。

2,指针与数组

C 语言中,数组名所对应的值就是第一个数组元素的内存地址,即可以把数组名看为指向数组首元素的指针。通过下面的代码片段理解:

int a[3]={10,20,30};
printf("The first element value: %d\n",*a);	//输出为:The first element value: 10

还有什么很多诸如数组指针,指针数组等等各种定义,我觉得单纯地记他们没有什么必要,本身用的就不多,就算到了用的时候,直接问问”度娘“就ok 了

3,指针与字符串

字符串是常量,常量是C

语言中最简单的表达式,而所有的表达式都是有值的,那字符串常量的值是什么呢?字符串常量的值就是字符串中首字符的内存地址。例如 apple

这个字符串常量的值就是第一个字符 a 的内存地址。因此我们可以用一个char 类型的指针指向这个字符串。

char *ptr = "apple";

4,指针与函数

函数是拥有特定功能的语句的集合,是构成程序的基本模块。在函数的定义过程中,可以将指针作为函数的参数,也可以将指针作为函数的返回值,甚至可以用指针来指向一个函数。

限于篇幅限制,这里就简单地提示一下,具体的区别或找一些具体例子来体会,大家很容易在网上搜集到的~ ~。

5,二级指针

所谓的二级指针就是指向指针的指针。其定义格式如下:

数据类型 **变量名

指针的实质就是内存地址,由于指针变量是可以存储内存地址的变量,因此也可以将其视作指针。而指针变量本身也是变量,需要占用内存空间,因此也有内存地址。如果将这个内存地址在存储到另一个指针变量中,就形成了一个指向指针的指针,即指向指针的指针就是二级指针。

定义好二级指针后就需要对它进行初始化与赋值了

int a = 10;	//定义一个int 类型的变量a,并初始化为10
int *pi = &a;	//定义一个int 类型的指针变量pi,并初始化其值为a 的内存地址

有了指针变量pi ,下面就可以定义一个二级指针并对其进行初始化了,如下:

int **ppi = π	//定义二级指针ppi,并通过取地址符获取指针变量pi 的内存地址,将其初始化给二级指针ppi

6,特殊指针

指针是C 语言的精髓和灵魂。其中有两种相对特殊的指针,一个是空指针,另一个是void 类型的指针。

int *pi=NULL;	//空指针
void *pv;	//void类型的指针,任何类型的指针都可以被隐式地转换为void类型的指针。因此,它通常作为函数的参数出现。

希望对你有帮助!持续分享中······

作者:博客园丨Charmchin

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

相关推荐

别争了,Access数据库才是真正的低代码开发平台

Access数据库是微软公司搞出来的“奇葩”产品。...

Access开发轻松一键将 Access 全库表格导出为 Excel

hi,大家好呀!在日常工作中,Access常常是我们忠实的数据管家,默默守护着项目信息、客户列表或是库存记录。它结构清晰,录入便捷,对于许多中小型应用场景来说,无疑是个得力助手。然而,当我们需要对这...

跟我学:从零开始用Access设计一套完整的系统(一)

序言:Access是一款强大而灵活的数据库软件,可以设计和开发各种类型和规模的数据库应用程序。本文旨在为您提供从零开始设计Access数据库系统的详细指导,并通过实际案例演示如何在Access中设计和...

问卷调查管理程序 Access数据库 功能介绍和VBA代码分享

o本系统包含主要功能有:问卷管理,题目管理,问卷填写,调查结果统计,数据汇总导出o数据库系统包含:表,查询,窗体,VBA代码...

非绑定记录窗体查看管理数据 Access数据库功能模块 VBA代码编程

模块Public成绩IDnumAsLong学生成绩管理PrivateSubCommand更新_Click()DoCmd.SetWarnings(False)...

ACCESS中的DLookUp函数是如何运算的?

一、DLookUp函数介绍1.DLookUp函数的用途:可以用于从指定集合(一个域)中获取符合条件的特定字段的值。2.DLookUp函数的格式为:DLookUp(expr,domain,...

Excel常用技能分享与探讨(5-宏与VBA简介 VBA之用户窗体-一)

用户窗体(UserForm)是VBA中创建交互式界面的核心工具,可用于数据录入、设置参数或展示信息。...

【每日任务计划管理系统】Access数据库管理系统 VBA代码分享

窗体系统主页文本框,组合框,按钮,子窗体OptionCompareDatabase...

VBA高效开发:用用户窗体打造个性化数据录入工具

在日常办公中,Excel的数据录入是否总让你陷入这些困境?手动输入易错、格式混乱难追溯、重复操作耗时费力。今天,我们将突破常规,利用VBA的用户窗体(UserForm)构建一套“智能校验、流程清晰、...

VBA编程(基于Access)第1课:VBA的作用和学习方法

VBA,英文全称VisualBasicforApplications,直接翻译过来叫做“可以直接使用的VB语言”。...

Access数据库宏与VBA代码的使用(精品一)

Access数据库的宏相当于实现某一功能的一系列命令和操作,我们无需写代码,系统已经将主体代码集成一块,我们只需要做一些简单的操作即可,而VBA代码则是实实在在的代码写到程序里面,我们可以自己编写,也...

【每日任务管理系统】(2) VB 管理系统 代码 Visual Basic access数据库

窗体全部任务DimdhAsLong'存储高度差DimdwAsLong'存储宽度差...

VBA连接access数据库开发软件(vba调用数据库连接)

VBA连接access数据库开发小软件虽然VBA(包括VB)已不再流行,但是在某些场合还是比较方便的,尤其对非编程专业人员。灵活使用VBA,可以很十分方便的处理excel,access数据,提高工作效...

九章云极发布全新AI智算云平台:支持秒级生成百万级Token

6月16日,在在九章云极智能计算科技论坛上,九章云极宣布推出全新AI智算云平台“九章智算云AlayaNeWCloud2.0”,该平台基于Serverless技术架构与强化学习技术(RL)的深度融合...

浅谈基于大数据技术下的“云旅游”平台运营策略研究

云旅游体验平台是利用大数据和虚拟技术,构建虚拟旅游环境,能够改变旅游企业的营销模式和旅游者的消费模式。本文从云旅平台多维度数据信息的获取与分析,平台体验质量反馈信息数据构建,云旅游平台服务功能设计方案...