指针和指针变量有什么区别?

2024-02-19

我知道这是非常基本的,但对我来说有点困惑。
我读了:

a pointer无非是一个address, and a 指针变量只是一个变量,可以存储一个地址.
当我们存储变量的地址时i在指针变量中p,我们说p 指着 i.

int i, *p = &i;

p指着i.

为了访问指针指向的对象,我们使用*(间接)运算符。

If p 是一个指针 then *p代表对象p目前点。

现在我很困惑我应该叫什么p -- pointer or 指针变量?

额外的:指针总是与地址相同吗?


让我们用希望更熟悉的数据类型替换“指针”一词,例如int:

int n = 42;

这里 42 是一个int值,以及n是一个变量,其中包含int。你可以打电话n an "int变量”。int 是像 42 或 -25315685 这样的数字,并且int变量保存这些数字。一旦你有了一个变量,你就可以给它分配不同的数字。到目前为止没有什么令人困惑的事情吗?

A pointer就像一个 int: 一个数字。它恰好是一个标识内存位置的数字,如果该内存位置中存储了某些内容,您可以将其称为address。与 int 类似,指针可以存储在变量中。存储指针的变量可以称为指针变量。

So, 指针和指针变量有什么区别?第一个是一个值,例如数字,第二个存储这些值。但人们通常通过变量存储的值来引用变量;人们不打电话n an "int变量”,但只是int,即使它可以在不同的时间存储不同的ints。在本文中,我将做同样的事情,有时当我指的是指针变量时写为指针;希望这种区别是清楚的。

指针总是地址吗?这是一个关于“地址”一词含义的问题。指针始终是一个地址,因为它以某种方式对应于一个内存位置,它是该内存位置的“地址”。但另一方面,如果程序无法访问该内存位置或者其中没有存储任何有用的内容,那么它真的是任何东西的“地址”吗?

现在让我们研究以下代码:

int *p;
p = &n;

第一行声明一个指针变量,名为p。可以存储的指针p是内存位置int数据;这很重要,原因我们稍后会看到。我们还是不给p任何值,因此它存储的指针是任意的。它当然不存储任何有用的地址;它甚至可能指向程序无法访问的内存区域。

在第二行中,我们获取的地址n变量与&- 运算符并将其分配给p. Now p存储地址n,值所在的内存位置n被储存了。

我们可以用指针做什么?我们可以读取和写入指针标识的内存位置。为此,我们“取消引用”指针*- 运算符,然后(*p)可以像你一样使用n。例如,您可以将新值写入n有了这个:

*p = 123;

正是在这一点上,为什么我们需要知道数据的类型就变得显而易见了。p可以指向:否则你不知道可以分配给什么(*p).

了解数据类型很重要的另一个原因p可以指向的是指针算术。例如p+1是一个指向int之后立即存储在内存中n; if p是一个指向大数据结构的指针p+1将是一个指向紧随其后存储的相同类型数据结构的指针。为此,编译器必须知道指针指向的内容的大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

指针和指针变量有什么区别? 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • 在哪里可以找到 Microsoft.Build.Utilities.v3.5

    如何获取 Microsoft Build Utilities v3 5 我正在使用 StyleCop 4 7 Stylecop dll 中的 StyleCop msbuild 任务似乎依赖于 Microsoft Build Utilitie
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 如果 Python 是解释型的,那么 .pyc 文件是什么?

    Python 是一种解释型语言 但为什么我的源目录包含 pyc文件 Windows 将其识别为 编译的 Python 文件 我已经明白了 Python 是一种解释型语言 这种流行的模因是不正确的 或者更确切地说 是建立在对 自然 语言水平的
  • Prisma - 如何将两个字段指向同一模型?

    我很难概念化如何处理这个问题 我仔细研究了 Prisma 文档和其他 SO 问题 但它们似乎都与这种情况略有不同 我有两个模型 model User id Int id default autoincrement firstName Str
  • 如何对 Jackson JsonSerializer 和 JsonDeserializer 进行单元测试

    我为我的应用程序编写了自定义 JsonSerializer 和 JsonDeserializer 现在我想为它们编写一些单元测试 一个干净的测试用例应该是什么样的 有一些干净的例子吗 干净意味着不依赖其他框架或库 Json序列化器 该示例正
  • AppendTargetFrameworkToOutputPath 在 .targets 文件中失败

    我正在尝试集中许多项目的一些构建配置 而 MSBuild 解决方案是使用 targets files https learn microsoft com en us visualstudio msbuild msbuild dot targ
  • 在 django 中通过拖放对项目进行排序

    在我的 django 项目中 我在模板中显示了书籍列表 Book型号有position我用来对书籍进行排序的字段 我试图通过拖放列表项对该列表进行排序 但我的下一个代码不能很好地工作 我用jQuery 用户界面 它在前端工作 但当用户拖放列
  • 将文本区域保存到文件

    是否可以将文本区域保存到文件中 FileWriter fw new FileWriter file1 getAbsoluteFile true BufferedWriter bw new BufferedWriter fw bw write
  • 来自一组键的 PHP 数组

    发现这篇文章对我有帮助 拆分字符串以形成多维数组键 https stackoverflow com questions 10519108 split a string to form multidimensional array keys
  • 给定一个字符串,找到元音和辅音数量相同的最长子串?

    给定一个字符串 找到元音和辅音数量相同的最长子串 澄清 我不确定我们是否可以生成一个新字符串 或者子字符串必须是原始字符串的一部分 到目前为止我有这个 代码片段 Scanner scanner new Scanner System in S
  • R 的丰富 Ctags

    是否有任何使用记录ctags http ctags sourceforge net 与 R 这有用吗 实施起来会不会很困难 具体来说 我刚刚开始使用 Vim 如果能够在一个文件中编写 R 函数 在另一个文件 例如 Rnw 文件 测试文件或其
  • 为什么 PayPal 的 IPN 模拟器不能使用 https 地址?

    在 PayPal 的 IPN 模拟器中 如果我输入 https URL 则会收到一条错误消息 很抱歉 我们无法发送 IPN 但是 在 http URL 上它工作正常 我该如何解决这个错误 这可能是因为您的 SSL 证书是自签名的或被 Pay
  • Java Calendar.DAY_OF_WEEK 给出了错误的日期

    下面的代码有什么问题 对于一年中的任何日期 它给出的日期都是错误的 import java util Scanner import java util Calendar public class Solution public static
  • 请求在 chrome 中偶尔会停滞很长时间

    Ajax 请求有时会在 Chrome 中长时间停滞 我终于成功地复制了它并保存了所有必要的相关数据 如果有人可以帮助我的话 可以在这里发布 The timeline from Chrome Dev Tool shows the reques
  • JavaScript ArrayBuffer 切片在 Safari 9.1.2 中明显损坏

    Safari 9 1 2 10601 7 7 中的基本 JavaScript 功能似乎被破坏 也许我只是做错了什么 正在寻求有关如何度过这一切的建议 有问题的函数是ArrayBuffer prototype slice https deve
  • llvm/clang 编译错误,内存耗尽

    我正在尝试在我的 ubuntu 14 04 虚拟机 具有 2GB 内存 上构建最新的 llvm clang 代码 我所做的是正常的配置 制作过程 这两个命令没有任何参数 最后 我有以下错误 llvm 4 链接 Debug Asserts 可
  • 如何使用 laravel 5.1 使用更新记录的 user_id 填充 modded_by ?

    使用 Laravel 5 1 时 我尝试创建一个观察者 它将自动更新以下 3 列 created by 当创建的记录 不再更新 时填充 Modified by 每次修改记录时填充新值 purged by 软删除记录时填充一个值 我知道 El
  • 尽管有 SecurityConfig,Spring Security 仍会阻止 POST 请求

    我正在开发一个基于 Spring Boot 的 REST API spring boot starter web 我使用Spring Security spring security core e spring security confi
  • 调试 MFC:“mfc100.dll”找不到或打开 pdb

    我正在尝试在调试时进入 MFC 源代码 但是 Visual Studio 显然在加载适当的符号时遇到问题 C WINDOWS symbols dll mfc100 i386 pdb PDB 与图像不匹配 我检查了其他问题 通常建议启用 符号
  • Rust 如何保证内存安全并防止段错误?

    我一直在寻找一种可以学习的语言 并且我发现 Rust 变得非常流行 Rust 有两件事给我留下了深刻的印象 内存安全和防止段错误 Rust 是如何实现这一点的呢 例如 Rust 和 Java 之间的哪些差异使得 Rust 具有安全功能 Ru
  • 如何将小型 ORC 文件组合或合并为较大的 ORC 文件?

    SO 和网络上的大多数问题 答案都讨论使用 Hive 将一堆小 ORC 文件合并为一个较大的文件 但是 我的 ORC 文件是按天分隔的日志文件 我需要将它们分开 我只想每天 汇总 ORC 文件 HDFS 中的目录 我最有可能需要用 Java
  • 指针和指针变量有什么区别?

    我知道这是非常基本的 但对我来说有点困惑 我读了 a pointer无非是一个address and a 指针变量只是一个变量 可以存储一个地址 当我们存储变量的地址时i在指针变量中p 我们说p 指着 i int i p i p指着i 为了