C语言入门Day_22 初识指针

news2024/12/26 10:35:07

目录

前言:

1.内存地址

2.指针的定义

3.指针的使用

4.易错点

5.思维导图 


前言:

 之前我们学过变量可以用来存储数据,就像一个盒子里面可以放不同的球一样。

这是一个方便大家理解专业概念的比喻

在计算机世界里面,数据实际上是以二进制的形式存储在内存中。

1.内存地址

1.1

我们在编程语言中使用数据是通过变量和常量的方式,

比如代表整数的int,代表浮点数的float,代表字符的char等等。

这些数据类型已经是编程语言(C语言)为了方便人类(程序员)理解,而封装出来的机制。

这些数据都存储在计算机的内存中,并且是以二进制的形式存储。

这些数据存储在计算机中的具体位置,就叫做内存地址

1.2

我们可以记住这样一个对照图,最下面是最接近计算机硬件的内存地址

上面一层是一个具体的数据

最上面一层是我们在编程中使用数据的方式

事实上内存地址也是一种“虚拟”的机制,具体的数据在硬件中的存储方式还有很多细节的处理,

但是对于程序或者编程而言,理解到这一层就已经够了。

1.3

我们知道了计算机中存储数据的原理是内存地址的机制以后,接下来我们学习一下C语言中是如何“直接”操作内存地址的——指针

 大部分编程语言,比如大家可能听过的Pyhon和Java,都无法直接操作内存中的数据,而是要通过变量或者常量的方式来"间接"操作内存中的数据。

细究起来,指针本质上也是一个变量,但是这个变量的特别之处在于,他存储的不是整形,浮点型和字符型这种可以被使用的数据类型,它存储的是——内存地址

1.4

 所以我们可以简单的理解为,在C语言中,指针就是内存地址,内存地址就是指针。

2.指针的定义

2.1

 指针的定义和变量的定义基本一样,只不过会多一个符号*

下面我们来定义一个指针:

int *p1;

1.这个指针会指向的数据类型——整型   int

2.指针的符号——星号   *

3.指针名—— p1

2.2

 刚才我们只是定义了一个指针变量,要完整的定义指针,我们还需要把指针“指向”一个变量;

定义一个指针p1,并把这个指针指向整型变量number_1:

int number_1=10;
int *p1;
p1=&number_1;
printf("%d\n",*p1);

1.定义一个整型变量   int number_1 = 10;

2.定义一个指向整型数据的指针   int  *p1;

3.把指针指向整型变量的内存地址   &number_1;

4.这个符号代表着number_1所在的内存地址   &

5.打印这个指针指向的数据   printf("%d\n", *p1);

2.3

我们再来回顾一下,我们定义了一个变量number_1,他所存的数据有一个自己的内存地址,

然后我们定义了一个指针p1,用这个指针指向了这个内存地址

最后我们访问了这个指针所指向的数据。

 2.4

刚才已经简单的使用了指针,我们用p1指针指向了一个定义好的整型变量,并且通过指针(而非变量)访问了这个数据。 

如果仅仅是这样使用,指针肯定算不上“灵活”,我们还可以把指针指向不同的变量,来使用不同的数据

所以我们又把指针称为指针变量,因为一个指针存储的内存地址也是可以改变或者重新赋值的

3.指针的使用

3.1

在上面学习中,我们只是把指针指向了一个变量,现在我们尝试把指针指向不同变量

int number_1=10;
int number_2=55;
int *p1;
p1=&number_1;
printf("%d\n",*p1);
p1=&number_2;
printf("%d\n",*p2);

1.定义两个变量number_1和number_2

int number_1 = 10;

int number_2 = 55;

2.定义一个整型的指针变量p1

int *p1;

3.把指针指向变量number_1,然后打印它

p1 = &number_1;

printf("%d\n", *p1)

4.然后再把指针指向变量number_2,然后打印它

p1 = &number_2;

printf("%d\n", *p1);

我们可以看到,通过把指针指向不同的变量,我们可以访问不同变量的数据,需要注意的是,这个指针只能指向“相同数据类型”的变量

3.2

最后就是一些使用指针的好习惯,比如初始化定义的时候,我们需要把指针指向一个空的地址NULL,当我们要使用它的时候再把它指向一个具体的变量。 

int *p1 = NULL;

4.易错点

5.思维导图 

最后我想说的是:

 在撰写这篇文章时,我参考了《白纸编程》这个app的观点和思想,我要感谢他们对我的启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1021932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海外ASO优化之提高应用曝光度的技巧1

作为应用程序的开发者,如何使我们的应用在众多竞争对手中脱颖而出?如何应用在App Store搜索中排名更高,以确保它符合App Store搜索中的搜索意图?这些都是我们要重点考虑的。 1、做好应用程序描述。 在填写应用描述之前&#xff0…

直线模组的常用语

在工业生产中,直线模组的叫法有很多种,对于新手小白来说,很容易就会被绕晕,今天我们就来简单说一下直线模组的常用称呼吧! 1、直线模组:与直线滑台同义,基本可以相互互换。直线模组一般是指可以…

编译原理.龙书学习1

第一章: 编译器:将程序翻译成一种能够被计算机执行的形式 解释器:解释器直接利用用户提供的输入执行源程序中指定的操作 一个编译器的结构 编译器将源程序映射为语义上等价的目标程序,这个映射过程由两部分组成:分析…

ApiFox衔接前后端开发人员,提升沟通效率实践

1. 为什么不用Postman而要使用ApiFox 1.1. Postman的问题(不便) 多系统数据不互通 API设计者、前端开发、后端开发、测试人员大量重复工作。 效率低 可视化程度低、操作不友好。 无法团队协作 单机离线使用为主,成员之间无法实时同步数据,无法协作。 …

Unity实现简易太阳系

开发环境:Unity 2022.3.5f1c1 Visual Studio 2022 太阳系相关星体:太阳、八大行星、月球 模拟星系:太阳系、地月系 功能:支持行星以太阳为中心,任意轴进行公转,此处演示同一平面。 a1-a8为公转轴&#xff…

需要每日温习的java八股文基础

一、java (1)集合 1.list:LinkedList、ArrayList和Vector ArrayList、LinkedList和Vector的区别,场景和扩容机制源码 LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不…

网站降权的康复办法(详解百度SEO数据分析)

随着搜索引擎算法的不断升级,很多网站在SEO优化过程中遭遇到降权的情况。如果您的网站也遭遇到了类似的问题,不必惊慌失措。本文将为您详细介绍网站降权恢复的方法,包括百度SEO数据分析、网站收录少的5个原因、网站被降权的6个因素以及百度SE…

什么是顶点颜色

在3D模型的渲染中,除了贴图属性外,顶点颜色也是一种常见的材质属性。顶点颜色是指通过给模型的顶点分配颜色值来定义模型表面的颜色。 顶点颜色通常以顶点数据的形式储存,并且与每个顶点的位置信息相对应。在渲染过程中,顶点颜色会…

【性能测试】JMeter:集合点,同步定时器的应用实例!

一、集合点的定义 在性能测试过程中,为了真实模拟多个用户同时进行操作以度量服务器的处理能力,可以考虑同步虚拟用户以便恰好在同一时刻执行操作或发送请求。 通过插入集合点可以较真实模拟多个用户并发操作。 (注意:虽然通过加入集合点可…

pdf在线加密怎么做?几个好用的方法分享

PDF在线加密怎么做?在进行PDF在线加密时,您可以使用以下几种方法来确保文档的安全性,并注意以下一些加密的注意事项。 方法一:使用PDF转换加密工具 首先我们可以在电脑上打开迅捷PDF转换器工具,进入该转换工具后先在顶…

Vue系列(二)之 基础语法【上篇】

目录 一. 插值 1.1 文本 1.2 原始HTML 1.3 属性 1.4 表达式 二. 指令 2.1 v-if/v-else-if/v-else指令 2.2 v-show指令 2.3 v-for指令 2.4 下拉框/复选框 2.5 动态参数 三. 过滤器 3.1 局部过滤器基本应用 3.2 局部过滤器串行使用 3.3 局部过滤器传参 3.4 全局过…

无涯教程-JavaScript - LCM函数

描述 LCM函数返回整数的最小公倍数。最小公倍数是最小的正整数,它是所有整数参数number1,number2等的倍数。使用LCM添加具有不同分母的分数。 语法 LCM (number1, [number2] ...)争论 Argument描述Required/OptionalNumber1, number2... 您想要最小公倍数的1到255个值。 如…

【JDK 8-函数式编程】4.2 BiFunction

一、BiFunction 二、改造上节课&#xff1a;四则运算 一、BiFunction Function 只能接收一个参数&#xff0c;要传递两个参数,则用 BiFunction 两个参数&#xff1a;可以是两种不同数据类型 调用方法: R apply(T t, U u); import java.util.Objects;/*** param <T>…

无涯教程-JavaScript - GCD函数

描述 GCD函数返回两个或多个整数的最大公约数。最大公约数是将number1和number2均除而无余数的最大整数。 语法 GCD (number1, [number2] ...)争论 Argument描述Required/OptionalNumber11 to 255 values. If any value is not an integer, it is truncated.Requirednumber…

颠覆传统!老子云支持70+三维格式转换,在线即可一键处理!

老子云自研AMRT展示框架及三维格式具有广泛兼容性&#xff0c;同时还会用户提供了3D格式在线转换工具&#xff0c;支持实现70三维格式模型的快速处理和转换。 你是不是也遇到过这种情况&#xff1a;做了半天的3D模型图&#xff0c;好不容易弄好了&#xff0c;到最后插入的时候居…

win11 腾讯会议提示未检测到可用麦克风

平时都用的耳机&#xff0c;今天直接用笔记本的音频进行会议&#xff0c;发现提示&#xff1a;显示未检测到可用麦克风&#xff0c;请插入设备重试&#xff1b;很奇怪的设置了腾讯会议的音频和电脑的&#xff0c;发现电脑的显示无可用的音频输入设备&#xff0c;折腾一番&#…

PYTHON第一次

1. 输入三个整数&#xff0c;按降序输出 a int(input("请输入第一个整数&#xff1a;")) b int(input("请输入第二个整数&#xff1a;")) c int(input("请输入第三个整数&#xff1a;"))nums [a, b, c] nums.sort(reverseTrue)print("…

mysql某批量更新导致死锁

#查询当前数据库全部线程show full processlist #查询当前运行的全部事务select * from information_schema.innodb_trx#查询锁情况select * from information_schema.innodb_locks#查询锁等待情况select * from information_schema.innodb_lock_waits #查看mysql设置等待锁时长…

《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)

文章目录 1. 概述1.1角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图示例 1. 概述 享元&#xff08;Flyweight&#xff09;模式采用共享方式向客户端提供数量庞大的细粒度对象。 所谓细粒度对象&#xff0c;是指实现了业务细节并相互独立的对象。细粒度对象是一种相对概念&…

2023年中秋·国庆节放假通知

放假期间如有业务、技术及其他相关需求&#xff0c;欢迎新老客户前来咨询&#xff01;放假期间如给您带来不便敬请谅解! 注意事项 1、放假离开公司前须全面清扫所属办公区域的卫生&#xff0c;收拾好桌面、保管好个人办公物品&#xff1b; 2、关闭个人电脑等办公设备的电源&a…