C语言什么是指针? 什么是指针变量?

一、问题

        指针是 C 语⾔中的⼀个重要概念,也是 C 语⾔中的⼀个重要特⾊。它的身影在整个 C 语⾔体系中都会出现,⽽且其概念也⼗分复杂,需要多加注意和思考。

二、解答

        为了更好地弄清指针的概念,这⾥不得不先提到地址以及数据在内存中的存储和读取⽅式。

        如果在程序中定义了⼀个变量,在对程序进⾏编译的时候,系统就会给这个变量分配内存单元,但是这个单元的⼤⼩根据定义变量的类型不同⽽不同。

        衡量内存单元⼤⼩的单位是字节,⽽内存中的每个字节都有⼀个编号,这个编号就是地址。类似于现实⽣活中的旅馆,字节就相当于每个房间,字节编号就相当于旅馆的房间编号,那么客⼈就相当于存取的数据。对于内存地址的模拟如图 1 所示。

        图 1 中的 1000、1002 等就是内存单元的地址,⽽ 0、1 就是内存单元的内容。换种说法就是基本整型变量i在内存中的地址从1000 开始,因为基本整型占两个字节,所以变量 j 在内存中的起始地址从 1002 开始,变量 i 的内容是0。

        那么指针又是什么呢?这⾥仅将指针看作是内存中的⼀个地址。多数情况下,这个地址是内存中另⼀个变量的位置。如图 2 所示。

        在程序中定义了⼀个变量,进⾏编译时就会给这个变量在内存中分配⼀个地址,通过访问这个地址可以找到所需的变量,这个变量的地址称为该变量的“指针”。如图 2 所示,地址 1000 是变量i的指针。

        如果⼀个变量包含了另⼀个变量的地址,那么,第1个变量就可以说成是指向第2个变量。所谓“指向”就是通过地址来体现的。因为指针变量是指向⼀个变量的地址,所以将⼀个变量的地址值赋给这个指针变量后,这个指针变量就“指向”了该变量。例如,将变量i的地址存放到指针变量p中,p 就指向 i 。其关系如图 3 所示。

        如图 4 所示,在地址 2000上的这个变量指向地址 2005 上的那个变量,在地址 2000上这个变量的内容的值是 2005。同理,在地址 2001上的这个变量指向地址 2004 上的那个变量,在地址2001 上这个变量的内容的值是 2004。

三、总结

        能够正确⽽灵活地运⽤C语⾔指针是⼀个成熟C语⾔程序员的标志之⼀。C语⾔指针可以有效地表⽰复杂的数据结构,能够动态地分配内存,⽅便字符串的使⽤,更好地操作数组,完成获取多个函数运⾏结果的任务。更重要的是,可以直接处理内存单元地址等。 总之,学好指针对C语⾔程序员很重要。

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

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

相关文章

MySQL知识整理

MySQL知识整理 基础第一讲:基础架构:一条SQL查询语句是如何执行的?架构尽量减少长连接的原因和方案为什么尽量不要依赖查询缓存 索引第四讲:深入浅出索引(上)第五讲:深入浅出索引(下…

C#面:介绍 ArrayList 与 Array 的区别

ArrayList 和 Array 是 C# 中两种不同的数据结构。 Array(数组) 是一种固定长度的数据结构,它可以存储相同类型的元素。在创建数组时,需要指定数组的长度,并且不能改变长度。数组的访问速度较快,因为它们…

【前端面试3+1】14 路由跳转的方式、如何取消已经发送的ajax请求、如何按顺序发起三个ajax请求并按顺序返回、【两个数组的并集】

一、路由跳转的几种方式 1、页面跳转 使用超链接 <a> 标签&#xff1a;通过在页面中定义超链接&#xff0c;用户点击超链接后会跳转到指定的URL页面。使用重定向&#xff1a;服务器端可以通过设置HTTP响应头中的Location字段&#xff0c;将用户重定向到指定的URL页面。使…

Web3 的社会影响:数字社会的新时代

随着科技的不断进步和创新&#xff0c;人类社会正逐步进入数字化时代的新阶段。Web3 技术作为数字社会的重要组成部分&#xff0c;正在以前所未有的方式重塑着我们的社会生活和交往方式。本文将探讨 Web3 技术对社会的影响&#xff0c;以及它所带来的数字社会的新时代。 1. Web…

JVM基础第一篇

内存结构 程序计数器 1.定义 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;每个线程都有一个独立的程序计数器&#xff0c;它是线程私有的&#xff0c;不会被线程切换所影响。 2.作用 记住下一条jvm指令的执行地址 3.特点 是线程私有的不会存在内存溢出 虚拟机…

数据结构——单链表(C语言版)

文章目录 一、链表的概念及结构二、单链表的实现SList.h链表的打印申请新的结点链表的尾插链表的头插链表的尾删链表的头删链表的查找在指定位置之前插入数据在指定位置之后插入数据删除pos结点删除pos之后的结点销毁链表 三、完整源代码SList.hSList.ctest.c 一、链表的概念及…

设计模式示例

单例模式示例 单例模式是一种常用的软件设计模式&#xff0c;其目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。以下是一个简单的单例模式示例&#xff1a; java public class Singleton {// 私有静态实例&#xff0c;防止被引用&#xff0c;此处赋值为nul…

【算法分析与设计】全排列

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 示例 1&#xff1…

Transformer 结构浅析

Transformer 结构浅析 文章目录 Transformer 结构浅析Transformer 网络结构编码器位置编码多头注意力层Add&NormFeed Forward 解码器带掩码的多头注意力层多头注意力层 预测 Transformer 网络结构 Transformer模型的网络结构如图&#xff0c;且transformer结构主要分为两部…

二叉搜索树--搜索二维矩阵 II

题目描述 编写一个高效的算法来搜索 m * n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,…

unordered_map 值类型为函数指针概述

在C中&#xff0c;unordered_map是一种关联容器&#xff0c;可以存储键值对。如果你想在unordered_map中定义的值是有参函数&#xff0c;你可以使用std::function和std::bind来实现。 以下是一个简单的例子&#xff0c;展示了如何在unordered_map中存储有参函数&#xff0c;并…

HarmonyOS4 页面路由

Index.ets: import router from ohos.routerclass RouterInfo {// 页面路径url: string// 页面标题title: stringconstructor(url: string, title: string) {this.url urlthis.title title} }Entry // 入口組件 Component struct Index {State message: string 页面列表// …

react17+antd4 动态渲染导航菜单中的icon

在路由信息对照表中的icon可以有两种形式&#xff1a;一种是组件形式&#xff0c;一种是字符串形式的。 在antd4的Menu.Item和SubMenu中的icon属性的格式为&#xff1a; 1.组件形式 这种方法在渲染时很方便&#xff0c;与antd中的Menu.Item中的icon属性的形式是一致的&#…

C++力扣Leetcode算法5--搜索

1.深度优先遍历&#xff08;depth-first-search&#xff09;&#xff0c;遇到新节点就遍历下去。因此遍历需要用先入后出的栈来实现&#xff0c;也可以通过与栈等价的递归来实现。 深度优先搜索也可以用来检测环路&#xff1a;记录每个遍历过的节点的父节点&#xff0c;若一个节…

计算机组成原理【CO】Ch2 数据的表示和应用

文章目录 大纲2.1 数制与编码2.2 运算方法和运算电路2.3 浮点数的表示和运算 【※】带标志加法器OFSFZFCF计算机怎么区分有符号数无符号数? 【※】存储排列和数据类型转换数据类型大小数据类型转换 进位计数制进制转换2的次幂 各种码的基本特性无符号整数的表示和运算带符号整…

微信小程序Skyline模式下瀑布长列表优化成虚拟列表,解决内存问题

微信小程序长列表&#xff0c;渲染的越多就会导致内存吃的越多。特别是长列表的图片组件和广告组件。 为了解决内存问题&#xff0c;所以看了很多人的资料&#xff0c;都不太符合通用的解决方式&#xff0c;很多需要固定子组件高度&#xff0c;但是瀑布流是无法固定的&#xf…

推荐一款轻量级的hosts文件编辑器(免安装版)

在管理和编辑hosts文件时&#xff0c;一款简单而有效的工具是非常重要的。下面推荐一款免安装版的轻量级hosts文件编辑器&#xff0c;让你轻松管理你的hosts文件。 windows系统默认hosts文件位置 下载地址&#xff1a;https://www.alipan.com/s/8kSns9eAi9f

CSS aspect-ratio属性设置元素宽高比

aspect-ratio 是CSS的一个属性&#xff0c;用于设置元素的期望宽高比。它设置确保元素保持特定的比例&#xff0c;不受其内容或容器大小的影响。 语法&#xff1a; aspect-ratio: <ratio>;其中 <ratio> 是一个由斜杠&#xff08;/&#xff09;分隔的两个数字&…

代码随想录第39天 | 62.不同路径 、 63. 不同路径 II

一、前言 参考文献&#xff1a;代码随想录 今天主要的题目是动态规划的路径问题&#xff0c;动态规划五要点&#xff1b; 1、确定dp数组&#xff0c;dp[i]代表什么i代表什么&#xff1b; 2、递推公式&#xff1b; 3、初始化dp数组&#xff1b; 4、遍历顺序&#xff1b; …

Linux常用命令介绍

Linux ### 常用命令&#xff1a; 1、ls命令&#xff1a; 显示当前目录下文件和文件夹。 举例&#xff1a;在用户目录&#xff08;root&#xff09;使用ls可以查看用户里的文件及文件夹。 -l可以详细看列出文件及文件夹, ll命令等价与ls - l 2、cd命令 作用是切换目录。 …