不使用指针迭代 C 风格数组

2024-02-09

我正在学习指针算术,并且有一段代码在相当长的一段时间内给我带来了错误。任何帮助将不胜感激。(我找不到它)

int arr [] = {1, 2, 3, 4, 5} ;
for (int i = 0 ; i < 5 ; i++)
{
    cout << *arr ;
    arr++ ;
}
cout << *arr << endl ;

I am unable to understand the error i am getting in codeblocks.我收到这个声明。

    error: lvalue required as increment operand|
    ||=== Build finished: 1 errors, 0 warnings ===|

在这段代码中,我必须迭代数组而不取消引用或使用 [] 操作员。


当您尝试增加数组时,您会收到此错误。它是无效的,因为在 C++ 中,数组的名称可以隐式转换为指向第一个索引的常量指针。您不能递增数组,因为数组是一个容器,递增容器是没有意义的。

为了完整地回答你的问题,我需要解释一些事情。我试试,其他人可以补充。

请记住,常量指针分为三种类型。

1.指向常量内存位置的指针。 这是一个普通的指针,但它指向一个本质上是常量的变量(实际上是只读变量)。这意味着它所指向的变量的值不能通过它来改变。通常它被用来像这样指向一个常量变量。

const int x = 10 ;
const int *ptr = & x ; 

在这里,你不能做*ptr = 5 ;因为指针指向的是一个常量变量。

2.指向内存位置的常量指针。 这是一个指针,在整个程序中只能指向一个内存位置。它所指向的变量的值可以改变,但指针本身是不变的。它是这样声明的。

int x = 10, y = 5 ;
int * const ptr = &x ;

你不能做ptr = &y ;稍后在节目中。数组也可以隐式转换为指向内存位置的常量指针。所以它不能以这种方式递增或递减。 (如果您愿意,可以在这里阅读:什么是数组衰减? https://stackoverflow.com/questions/1461432/what-is-array-decaying)

3.指向常量内存位置的常量指针。 这是一个本身是常量的指针,也指向常量内存位置。它是这样声明的。

const int x = 8 ;
const int * const ptr = &x ;

这意味着你不能将指针指向除初始化位置之外的任何地方,甚至不能更改它所指向的位置的值。

我希望现在这个概念已经非常清楚了。现在回答你的问题:你想通过指针算术打印数组,但你不能增加数组本身。因此,一种解决方案是创建另一个指针(普通指针)并将其分配给数组第一个索引的地址。然后您可以增加、减少或更改该数组的值。像这样的东西。

int arr [] = {1, 2, 3, 4, 5} ;
int *ptr = arr ;
for (int i = 0 ; i < 5 ; i++)
{
    cout << *ptr << " " ;
    ptr++ ;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不使用指针迭代 C 风格数组 的相关文章

随机推荐

  • 当“以管理员身份运行”时,实例化 COM 组件失败并显示“类未注册”

    实例化 COM Interop 对象时 var comObj new ComComponentClass 我得到了COMException Retrieving the COM class factory for component wit
  • CocoaLumberjack FileLogger 记录到多个文件

    我正在使用这个 CocoaLumberjack 框架来记录 Objective C 设计中的所有消息 现在我想将所有错误记录到一个文件 并将所有其他消息记录到另一个文件 我知道我可以使用格式化程序来过滤这些信息 我在 AppDelegate
  • 实现 TextWriter 的派生类

    我有两个类 我无法以任何方式更改它们 第 1 类 采取TextWriter作为构造函数参数并将其用作输出流 类2 提供方法WriteLine string 我需要一个适配器 以便将 Class1 的所有输出写入 Class2 因此我启动了一
  • Builder 与 GlobalKey

    与构建 Flutter UI 相关的许多问题都归结为错误BuildContext 例如显示SnackBar 答案通常是使用Builder或使用GlobalKey 两者都有效 但我注意到文档全局密钥 https docs flutter io
  • 如何使用命令机器人框架执行bat文件(.bat)?

    我有一个 脚本文件 我想在机器人框架中执行这个脚本 我也在尝试这个 但对我来说没有任何作用 Run CURDIR script script bat 有人可以帮我吗 Use 工艺库 http robotframework org robot
  • 删除 SQL 表中的树节点

    我正在尝试编写一个递归过程 该过程将删除该节点及其所有子节点 如果它们在表中 我尝试执行以下操作 CREATE PROCEDURE DeleteFile FileID INTEGER UserID VARCHAR MAX AS DELETE
  • AG 网格 - 禁止在特定列/单元格内选择行

    使用 AG 网格 我需要制作一个在单击时选择行的表格 但是单击某些单元格不会导致选择该行 到目前为止 我最好的想法是当鼠标悬停在非选择单元格上时禁用单击行选择 就像是 gridOptions onCellMouseOver event gt
  • 命名空间“Mvc”的类型在命名空间“Microsoft.AspNet”中不存在

    我正在 Visual Studio 2015 中开发 MVC 项目 最初在 VS 2013 中创建 一切都构建正确 但在编码时 视图显示很多错误 ViewBag Title Index Layout Views Shared Layout
  • 如何使用批处理文件编辑特定的组策略

    我在一个学区的 700 多台计算机上工作 并编写了一个小程序 我打算将其写入 CD 该程序设置为插入磁盘时自动运行 并提示计算机的屏幕分辨率以及建筑物所在的计算机 不同的教学楼 然后 程序将运行一个批处理文件 将默认桌面从磁盘复制到 win
  • 在生产环境中部署 ReactJS 应用程序(使用 NodeJS 后端)

    我们的项目现已结束 我们只有两周的时间将项目归还给我们大学最后一年的学习 我们的老师告诉我们 现在开发阶段已经结束 我们必须将其部署到生产阶段 我们使用 ReactJS 作为前端 托管在 localhost 3000 使用 NodeJS 进
  • 对不同集合上匹配 id 的对象数组进行排序

    我有一个对象数组 array id 5 name Helen age 20 id 15 name Lucy age 30 id 7 name Carlos age 1 然后我有一个类似的数组 以不同的方式排序 arraySorted id
  • Google 云容器构建器并不总是从 bitbucket 触发

    我在 Google Cloud Container Builder 中设置了构建触发器 这些触发器设置为在特定分支上触发并使用存储库中的 cloudbuild yml 配置 大约在我将提交推送到这些分支的第一天 它触发了容器构建并成功完成
  • 使用 Go 将数据发送到 Datadog

    我使用 Go 收集数据并希望将其可视化 我选择了 Datadog 但没有找到 Go 用于向 Datadog 发送指标的示例或实时项目 但官方网站说支持Go 第一步是在运行应用程序的服务器上安装 DataDog 代理 https docs d
  • tableView didSelectRowAtIndexPath 在 iOS 7 上无法正常工作。为什么?

    首先我想说我只是提出这个问题 因为我想了解发生了什么 我在 Xcode5 上全新安装时打开了一个旧的 Xcode 项目 一个非常简单的项目 当我意识到它在 iOS 7 上不起作用时 为什么 不知道 我看到了一些其他问题 没有得到任何有用的答
  • Vue.js 组件不工作

    我似乎无法弄清楚如何使组件工作 如果没有该组件 它可以正常工作 注释代码 这是我的 HTML strong Total Price strong span span br strong CPC strong span span 这是我的 V
  • Snap:编译的拼接代码示例

    我想我前段时间确实问过类似的问题 但由于 API 不稳定 没有得到回答 所以我一直在等待0 13的过去 我不确定提出类似问题是否正确 解释的替代方案是什么runChildrenWith Text and mapSplices在编译的拼接世界
  • 为什么 Safari 或 Firefox 无法处理来自 MediaElementSource 的音频数据?

    Safari 或 Firefox 都无法处理来自MediaElementSource使用网络音频 API http jsbin com ImUmOXe 1 edit js output var audioContext audioProce
  • 需要 grunt@>=0.4.0 的对等点

    为什么我会收到以下错误 我的 grunt 版本是 gt v0 4 0 npm install grunt contrib concat save dev 未满足的对等依赖 grunt gt 0 4 0 错误信息 Projects Hartz
  • Kotlin 本机互操作链接器找不到框架

    我正在尝试在 Kotlin 多平台项目中使用 cocoapods 框架 所以我 将框架添加到 Pods 文件中 运行 pod install created def file added cinterop配置在build gradle gr
  • 不使用指针迭代 C 风格数组

    我正在学习指针算术 并且有一段代码在相当长的一段时间内给我带来了错误 任何帮助将不胜感激 我找不到它 int arr 1 2 3 4 5 for int i 0 i lt 5 i cout lt lt arr arr cout lt lt