c语言:初识指针

news2024/11/28 20:55:38

初识指针

  • 一.指针是什么
    • 问题一:指针,指针变量,内存,地址,编号的关系
    • 问题二:为什么指针大小是4或8字节
  • 二.如何使用指针
  • 三.指针类型
    • 问题三:既然指针是4个字节,那它是如何放下long类型的呢

在这里插入图片描述

一.指针是什么

在这里插入图片描述

想要了解指针,必须得先了解内存

内存

内存是电脑上的一种存储设备
一般是4/8/16G

程序在运行时会加载到内存中,这时就会占用内存

如何管理内存

在这里插入图片描述

我们这里把内存划分为一个一个的小屋子(内存单元)

在这里插入图片描述

一个内存单元的大小是一个字节

在这里插入图片描述

问题一:指针,指针变量,内存,地址,编号的关系

我们给每一个内存单元编上号(这里为了简洁所以编号都是以16进制来写的),每一个内存单元都有它自己的号码

其实这个编号就是地址,也就是指针

ps:这里指出一个误区,内存是内存,地址是地址,千万不要把内存跟地址混为一谈,内存里储存的是数据,而地址(指针)是这个内存的编号

这里我假设将一个变量int a=10存入内存中

在这里插入图片描述

它其实就是一个字节一个字节从低地址到高地址填充,每个字节都有各自的地址(当然中间的地址是假设),我们使用&a来取出a的地址其实是(0x0012ff40),也就是第一个字节的地址(较小的地址)

我们就可以这么写int*pa=&a。pa就被称为指针变量(指针是一种变量,专门用来存放地址)

ps:我们通常都直接说pa是指针,其实它的全称应当是指针变量,指针是地址,而指针变量是专门用来存放地址的,注意区分(后续我遵循一般口语,指针变量都简称指针)

这里给个例子
在这里插入图片描述

这里我们可以看出其实用pa和&a打印出来的效果是一样的,也就是a的地址存到了pa里

问题二:为什么指针大小是4或8字节

内存为什么这样分呢,它有多少呢

在这里插入图片描述在这里插入图片描述

有32根电线,每根电线上产生两种可能(0,1),那么一共就有2的32次方种排序,那么我们的内存就是2的32次方个比特那么多,也就是4G

ps:现在32根电线不够用了,大多数电脑都是64位的

那么我们的指针变量要想容纳地址(因为每个地址如上图是32个比特)就必须得有32个比特位那么大,也就是常规的4个字节(当然同理在64位电脑上就是64个比特,8个字节)

二.如何使用指针

我们想要使用指针,得先给指针初始化,也就是让它存入一个地址。

如上面我令int*pa=&a,就是把a的地址存入了pa中,也就是将这个指针初始化了,那么我们如何通过这个指针来找到a呢

这里我们只需要解引用pa( * pa),就可以通过这个地址找到存在该地址下的存储单元内的数据(a),我们就可以直接把*pa看作a,同理我们就可以直接通过它来修改a的值

在这里插入图片描述

三.指针类型

指针类型其实跟变量类型一样,有int short long…

但指针类型跟变量有很大的区别:在32位机器里,无论是整形还是字符形还是其他类型,指针(变量)的大小总是4个字节。

问题三:既然指针是4个字节,那它是如何放下long类型的呢

这里曾经困扰了我一段时间,在此我们需要抓住指针的本质

如上文所说,指针(变量)是用于存放这个内存的编号的,那么在32位机器中,一共有32根电线,每根电线能产生0,1两种可能,根据排序,那么就能产生2的32次方个内存单元,每个内存单元需要一个编号,那么我们就需要2的32次方个编号,那么指针就需要32位也就是4个字节

所以综上,指针只是存这2的32次方种编号的与你存的内容无关,你存的数据是在内存单位里的。而指针存的是这个门牌号,所以当然能存的下啦

既然指针都是4或8个字节,那这区分类型有什么用呢?

这里举个例子

在这里插入图片描述

注意蓝括号前面的16进制数是a的地址,蓝括号内的16进制数是a存在内存中的数据,每两个16进制数表示一个字节,这里整形是4个字节

在这里插入图片描述

当我继续走,走完后可以看到a的第一个字节被改为了0而后面的3个字节未发生变化,这里可以看出char类型指针一次操作一个字节

在这里插入图片描述

这次试试int类型的指针

在这里插入图片描述

这里可以看出,走完后可以看到a的4个字节全部变为了0,int类型指针一次操作4个字节

得出结论:指针类型决定了,指针进行解引用操作时,一次访问几个字节
在这里插入图片描述

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

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

相关文章

数据库:Centos7安装解压版mysql5.7图文教程,亲测成功

目录 1、卸载Centos7默认自带的mariadb数据库,避免冲突 2、下载解压版mysql并安装 3、配置mysql 4、mysql客户端访问 Centos7安装mysql5.7解压版完整教程避免踩坑,可以把数据目录和系统目录分开设置。 1、卸载Centos7默认自带的mariadb数据库&#xff0c…

Qt5开发从入门到精通——第十二篇一节(Qt5 事件处理及实例——多线程及简单实例)

提示:欢迎小伙伴的点评✨✨,相互学习c/c应用开发。🍳🍳🍳 博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀 文…

菜鸟Linux(3):环境变量

"Oh heiya New World!" 一、什么是环境变量? 谈起环境变量,也许我们在敲代码的层面上并不关心。在链接的时候,我们从来没有告诉编译器,去哪里找动态库去链接;我们也从来没有告诉进程 执行该进程的用户是谁?以及在命令行解释器时,启动一个进程…

深度学习基础--神经网络(4)参数更新策略,梯度法

导数 导数:表示某个瞬间的变化量,公式定义: df(x)dxlimh→0f(xh)−f(x)h(4.4)\frac{df(x)}{dx} lim_{h \to 0}\frac{f(x h)-f(x)}{h} \tag{4.4} dxdf(x)​limh→0​hf(xh)−f(x)​(4.4) 求导的代码实现: import numpy as np i…

SSM框架-Spring(三)

目录 1 Spring对事务的支持 1.1 引入事务场景 1.2 spring对事务的支持 Spring实现事务的两种方式 Spring事务管理API 1.3 事务属性 1.3.1 事务传播行为 1.3.2 事务隔离级别 1.3.3 事务超时 1.3.4 只读事务 1.3.5 异常回滚事务 1.4 事务的全注解式开发 1.5 声明式事…

玩转SQL:咱们的目标是成为SQL方面的“扫地僧”

引言 (Structured Query Language)标准结构化查询语言简称SQL,编写SQL语句是每位后端开发日常职责中,接触最多的一项工作,SQL是关系型数据库诞生的产物,无论是什么数据库,MySQL、Oracle、SQL Server、DB2、PgSQL....&…

FPGA串口接收Demo

串口接收Demo 简单介绍 在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据 空闲状态时,为高电平起始位为一个单位长度低电平,停止位为一个长度高电平 分析 帧格式 8位数据位1位停止位无校验位 …

配电站房监控系统方案

配电站为低压用户配送电能,设有中压进线(可有少量出线)、配电变压器和低压配电装置。计讯物联工业网关下配电站房监控系统方案,24小时对运行设备进行不间断数据采集上传服务器,云平台对接,远程实时在线监控设备运行状态 &#xff…

web前端-javascript-标识符(说明,命名规则、不以数字关键字保留字开头、驼峰命名,补充)

文章目录标识符1. 说明2. 命名规则3. 补充标识符 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><script type"text/javascript">//千万不要这么用/* var if 123;console.log(if); *//…

Linux、阿里云服务器用tomcat部署项目

文章目录一、安装JDK和Tomcat1.1 安装JDK2.2 安装Tomcat二、把项目打包成war包&#xff08;jar也可以&#xff0c;但是有区别&#xff09;三、把war包放进webapps里面四、修改tomcat配置五、修改防火墙和开放端口等设置六、在浏览器访问项目一、安装JDK和Tomcat 1.1 安装JDK …

如果你想跨行转做数据分析师,劝你慎重

随着数字化时代的浪潮&#xff0c;数据分析师成了炽手可热的香饽饽&#xff0c;疫情当下&#xff0c;各行各业的失业人员逐渐增多&#xff0c;所以人人都想转行当数据分析师。作为业内人员&#xff0c;说实话&#xff0c;真的不建议&#xff0c;数据分析师真的不是想象的那么简…

【Webpack】webpack的基础使用详细总结 上(建议收藏)

1- 前言&#xff08;前端工程化&#xff09; 实际的前端开发&#xff1a; 模块化&#xff08;js 的模块化、css 的模块化、其它资源的模块化组件化&#xff08;复用现有的 UI 结构、样式、行为&#xff09;规范化&#xff08;目录结构的划分、编码规范化、接口规范化、文档规范…

代码随想录算法训练营第六天|LeetCode 242. 有效的字母异位词 、349. 两个数组的交集 、 202. 快乐数、1. 两数之和

LeetCode 242. 有效的字母异位词 题目链接&#xff1a;242. 有效的字母异位词 方法一&#xff1a; 分析&#xff1a; 两个字符串里的每个字母的个数相等&#xff0c;那么我对每个字符串里的字符串都进行下排序&#xff0c;排出来后岂不是两个字符串的每个字母如果一一对应就…

高通平台开发系列讲解(AI篇)高通神经网络处理引擎工作流程详解

文章目录 一、Model to Runtime Workflow(模型运行流程)二、Basic SNPE Workflow(基本工作流程)2.1、Converting a Network Model(模型转换)2.2、Quantizing a Model(模型量化)沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍高通平台神经网络处…

K_A07_002 基于 STM32等单片机驱动ULN2003模块按键控制步进电机正反转

目录 一、资源说明 二、基本参数 1.参数 2、引脚说明 三、驱动说明 步进电机驱动时序 反向输出 对应程序: 四、部分代码说明 1、接线说明 1.1、STC89C52RCULN2003模块 1.2、STM32F103C8T6ULN2003模块 五、基础知识学习与相关资料下载 六、视频效果展示与程序资料获取 七…

C#使用EPPlus操作Excel(读写)

之所以使用EPPlus操作Excel是因为微软自带的运行效率太低&#xff0c;数据多后会特别慢&#xff0c;不能满足现场要求。如果想速度快&#xff0c;而且只是读取Excel的配置还有另一个办法就是将Excel保存成xml文件&#xff0c;参考我的另一个文章&#xff1a;C# 读取XML格式的Ex…

概率统计·大数定律及中心极限定理【大数定律、中心极限定律】

这一章的学习更多的是为后面的知识作铺垫&#xff0c;所以内容比较少&#x1f358;&#x1f358;&#x1f358;&#xff08;当然也减轻一点复习的负担&#x1f917;&#x1f917;&#x1f917;&#xff09; 依概率收敛 需要概率P极限趋近于1 切比雪夫不等式的特殊情况 前提&…

数据库-sql执行深度剖析以及redo log和undo log(下)(二)

目录 buffer pool change Buffer Log Buffer redo log 随机IO/顺序IO redo log刷盘时机 redo logt特点 redo log结构 Adaptive Hash Index 磁盘区域 undo log 总结更新流程 BInlog 基于上一章sql执行原理基础上&#xff0c;我们来深入探讨sql更新的整个原理。 bu…

力扣(LeetCode)33. 搜索旋转排序数组(C++)

二分查找 二分的本质&#xff0c;是对某种性质的划分&#xff0c;一半满足&#xff0c;另一半不满足&#xff0c;即可划分。 比较 nums[mid]nums[mid]nums[mid] 和 nums[0]nums[0]nums[0] &#xff0c;可以知道 midmidmid 左右哪一端有序。 如果左端有序&#xff0c;我们找往…

66.基于Django学习会话技术

1. 背景介绍 ​ HTTP协议有一个特性就是无状态的&#xff0c;是指协议对于交互性场景没有记忆能力。 ​ 随着动态交互的web应用的出现&#xff0c;HTTP的无状态特性严重阻碍了动态交互应用程序的发展&#xff0c;例如一些购物网站在进行购物时候都会进行了页面跳转/刷新&…