C语言入门Day_22 初识指针
目录
前言:
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的观点和思想,我要感谢他们对我的启发和帮助。
相关文章:
C语言入门Day_22 初识指针
目录 前言: 1.内存地址 2.指针的定义 3.指针的使用 4.易错点 5.思维导图 前言: 之前我们学过变量可以用来存储数据,就像一个盒子里面可以放不同的球一样。 这是一个方便大家理解专业概念的比喻。 在计算机世界里面,数据实…...
【面试必刷TOP101】删除链表的倒数第n个节点 两个链表的第一个公共结点
目录 题目:删除链表的倒数第n个节点_牛客题霸_牛客网 (nowcoder.com) 题目的接口: 解题思路: 代码: 过啦!!! 题目:两个链表的第一个公共结点_牛客题霸_牛客网 (nowcoder.com) …...
手刻 Deep Learning -第壹章 -PyTorch教学-激励函数与感知机入门(上)
一、前言 本文接续前篇教学 Pytorch 与线性回归 ,本文着重在 Activation Function ( 中文称 激励函数 ),我们会介绍激励函数 (也有人称 激活函数? 激发函数? ) 为什么会有用…...
物理内存分配
目录 内核物理内存分配接口 内存分配行为(物理上) 内存分配的行为操作 内存 三个水位线 水线计算 水位线影响内存分配行为 内存分配核心__alloc_pages 释放页 1、内核物理内存分配接口 struct page *alloc_pages(gfp_t gfp, unsigned int ord…...
RFID产线自动化升级改造管理方案
应用背景 在现代制造业中,产线管理是实现高效生产和优质产品的关键环节,产线管理涉及到生产过程的监控、物料管理、工艺控制、质量追溯等多个方面,有效的产线管理可以提高生产效率、降低成本、改善产品质量,并满足市场需求的变化…...
全量数据采集:不同网站的方法与挑战
简介 在当今数字化时代中,有数据就能方便我们做出很多决策。数据的获取与分析已经成为学术研究、商业分析、战略决策以及个人好奇心的关键驱动力。本文将分享不同网站的全量数据采集方法,以及在这一过程中可能会遇到的挑战。 部分全量采集方法 1. 撞店…...
Redis——渐进式遍历和数据库管理命令
介绍 如果使用keys * 这样的操作,将Redis中所有的key都获取到,由于Redis是单线程工作,这个操作本身又要消耗很多时间,那么就会导致Redis服务器阻塞,后续的操作无法正常执行 而渐进式遍历,通过多次执行遍历…...
如何打造可视化警务巡防通信解决方案
近年来,科学技术飞速发展,给予了犯罪分子可乘之机。当面临专业化的犯罪分子、高科技的犯罪手段,传统警务模式似乎不能满足警方打击犯罪的需要,因此当今公安工作迫切需要构建智能化、系统化、信息化的警务通信管理模式。 警务人员…...
ATF(TF-A) SPMC威胁模型-安全检测与评估
安全之安全(security)博客目录导读 ATF(TF-A) 威胁模型汇总 目录 一、简介 二、评估目标 1、数据流图 三、威胁分析 1、信任边界 2、资产 3、威胁代理 4、威胁类型 5、威胁评估 5.1 端点在直接请求/响应调用中模拟发送方或接收方FF-A ID 5.2 篡改端点和SPMC之间的…...
BIO AIO NIO 的区别
BIO AIO NIO 是 Java 中用于 I/O 操作的三种不同的编程模型。它们的区别在于它们执行I/O 操作的方式和效率。在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。 同步与异步 同步:同步就是发起一个调用后ÿ…...
大数据学习1.1-Centos8网络配置
1.查看虚拟网卡 2.配置网络信息 打勾处取消 记住箭头的数字 3.修改 网络连接 4.进入虚拟网络 5.进入属性 6.修改IPv4 5.将iIP和DNS进行修改 6.配置网络信息-进入修改网络配置文件 # 进入root用户 su root # 进入网络配置文件 cd /etc/sysconfig/network-scripts/ # 修改网络配…...
在Android studio 创建Flutter项目运行出现问题总结
在Android studio 中配置Flutter出现的问题 A problem occurred configuring root project ‘android’出现这个问题。解决办法 首先找到flutter配置的位置 在D:\xxx\flutter\packages\flutter_tools\gradle位置中的flutter.gradle buildscript { repositories { googl…...
Ceph入门到精通-ceph对于长文件名如何处理
RADOS object with short name 上一篇博文,我们将介绍了对象相关的数据结构ghobject_t,以及对象在底层文件系统存储的文件名,以及如何从文件名对应到 ghobject_t对象。 映射关系如下图所示: 这里面有一个漏洞,即obje…...
vue+element-ui 项目实战示例详解【目录】
vue 和 element是两个流行的前端即时,通常用于管理后台,PC等页面 能够快速构建美观的界面 1. vue2 介绍 Vue.js是一个流行的JavaScript框架,用于构建用户界面。它的版本分为Vue 2和Vue 3,而Element是一个基于Vue.js 2的UI组件库。…...
性能测试-性能调优主要方向和原则(15)
性能调优主要方向明确性能瓶颈之后,就需要进行性能调优了,调优主要从图所示的多个方向入手。能优化手段并不一定是独立应用的,在一次优化过程中很可能应用了多种优化技巧。 硬件层面优化 硬件层面优化更偏向于监控,当定位到硬件资源成为瓶颈后,更多是采用扩容等手段来解决…...
关于taos数据库使用过程中突发“unable to establish connection”问题解决
项目使用的版本信息 1.taos的版本信息 3.0.4.1 2.jdbc的版本 3.2.1 3.druid连接池版本 1.2.11问题描述 Java应用服务连接,突然大量抛出如下的异常信息导致应用宕机: sql: select server_status(), desc: unable to establish connection和集团DBA沟通…...
【Qt】Qt中将字符串转换为数字类型的函数总结以及用法示例
在Qt中,可以使用以下函数将字符串转换为数字类型: toInt():将字符串转换为int类型。toDouble():将字符串转换为double类型。toFloat():将字符串转换为float类型。toLongLong():将字符串转换为long long类型…...
效率工具3-计算机网络工具
查看各个状态的tcp连接情况 netstat -n | awk ‘/^tcp/ {S[$NF]} END {for(a in S) print a, S[a]}’ /^tcp/ 正则表达式匹配 netstat 命令输出的匹配部分,即以 "TCP" 开始的行{S[$NF]} 对于符合条件的每一行,awk 命令将使用数组 S 来计算每…...
2万多条汉字笔画笔顺查询ACCESS\EXCEL数据库
发现很多新华字典类的数据都没有笔顺的相关数据,因此就找了一下笔顺查询相关,发现有两个模式,一种是每个字每个笔画都有一张图片(很庞大的图片数据量);一种是笔画图片文件显示型,比如今天采集的…...
我的一周年创作纪念日,感谢有你们
机缘 还记得 2022 年 09 月 19 日吗? 我撰写了第 1 篇技术博客:《纯CSS实现Material文本框(PC和移动端都可以使用)》;从此就开始了我在CSDN记录日常工作中开发和学习的第一步。在后续又参加了新星计划,取得…...
【音视频】ffplay源码解析-PacketQueue队列
包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …...
C++ 霍夫变换圆形检测
霍夫变换圆形检测 一、检测原理二、实现步骤三、算法实现一、检测原理 HoughCircles 参数说明: HoughCircles( InputArray image, // 输入图像 ,必须是 8 位的单通道灰度图像 OutputArray circles, // 输出结果,发现的圆信息 Int method, // 方法 - HOUGH…...
南阳师范学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著——2023学生开学季辉少许
南阳师范学院图书馆藏《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著——2023学生开学季辉少许...
如何将你在树莓派上部署的 IoT 物联网 MQTT 服务发布到公网?
上一章,你成功的在树莓派搭建了 EMQX 开源社区版,用来提供 MQTT 服务,并验证了设备端接入和消息通信。但你发现只能在局域网内访问 emqx.local 服务,而 IoT 设备分布在全国各地公共网络环境,这些设备该如何接入呢&a…...
系统架构设计师(第二版)学习笔记----软件工程
【原文链接】系统架构设计师(第二版)学习笔记----软件工程 文章目录 一、软件工程1.1 软件危机的表现1.2 软件工程的内容 二、软件过程模型2.1 软件的声明周期2.2 瀑布模型2.3 瀑布模型的缺点2.4 原型模型2.5 原型模型开发阶段2.6 开发原型的途径2.7 螺旋…...
C与C++字符串分割方法示例汇总
在C语言中,没有内置的字符串分割函数。但是,你可以使用其他字符串操作函数和循环来实现字符串分割。这里是使用 strtok 函数在C中分割字符串的示例: #include <stdio.h> #include <string.h> int main() {char str[] "Hel…...
HTTP代理与VPN:网络代理技术的比较
HTTP代理和VPN是两种常见的网络代理技术,它们可以帮助用户隐藏自己的IP地址、保护网络隐私、绕过网络限制等。本文将介绍HTTP代理和VPN的定义、工作原理、优缺点以及使用场景。 一、HTTP代理 HTTP代理是一种通过代理服务器转发网络请求的技术。当用户发起网络请求时…...
免费低代码平台,助企业高效管理任务
编者按:本文主要介绍了免费的低代码平台实现了高效的任务管理系统,助力企业在任务管理方面的效率更上一层楼!这个免费的低代码平台,将提高员工的工作效率。它不仅是一个任务管理系统,更是一个能让 企业 摆脱繁琐工作&a…...
基于conda的相关命令
conda 查看python版本环境 打开Anaconda Prompt的命令输入框 查看自己的python版本 conda env list激活相应的python版本(环境) conda avtivate python_3.9 若输入以下命令可查看python版本 python -V #注意V是大写安装相应的包 pip install 包名5.查看已安装…...
【微信小程序】swiper的使用
1.swiper的基本使用 <jxz-header></jxz-header> <view class"banner"><swiperprevious-margin"30rpx"autoplayinterval"2000"indicator-dotsindicator-color"rgba(0,0,0,0.3)"indicator-active-color"#bda…...
建站之星模板制作/自媒体平台注册
在命令模式下,输入:.,$d 一回车就全没了。 表示从当前行到末行全部删除掉。 用gg表示移动到首行。...
wordpress怎么没有导航栏/网络推广专员是干什么的
Android实现新浪微博那种样式的底部标签,效果真滴灰常不错,不用不知道,一用吓一跳,放心,是惊喜,不是惊吓。代码示例:package com.good;import android.app.TabActivity;import android.content.…...
最近重大新闻事件2021/太原seo招聘
源码地址:https://github.com/YANGKANG01/Spring-Boot-Demo 代码生成操作 在pom.xml文件中引入以下包: <!-- mybatisplus与springboot整合 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boo…...
上海网站推广汉狮/网站子域名查询
常用Action说明: String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式。. “android.intent.action.ADD_SHORTCUT”String ALL_APPS_ACTION 动作:列举所有可用的应用。 输入:无。 “android.intent.action.ALL_APPS”Strin…...
wordpress批量后台破解工具/营销策划书格式及范文
1.使用lsof命令 lsof 是“list open files”的缩写,在linux系统中,一切可是为文件,网络连接也可视为文件,因此,我们可以通过lsof命令查看占用某个端口号的进程。 示例: lsof -i :8080 或者 lsof -i | gr…...
在线python编程网页/seo咨询推广
什么是 Visual Paradigm IT项目管理框架? 框架是一组工具,可以帮助您更快,更好地完成工作。IT项目管理框架是一个概念,方法和工具的集合,帮助项目团队实现以下目标。 管理项目生命周期:从项目识别到项目启动…...