const 指针固定为变量

2024-01-10

我不知道如何告诉 C 我想要一个不会移动的指针。它将始终指向同一个数组。也就是说,数组成员不是恒定的,但数组本身是全局的,因此它位于固定位置。

所以,当我编码时:

#include <stdio.h>

int v[2]={0, 1};
const int *cpv=v;

int main(void)
{
    v[1]=2;     printf("%d\n", v[1]);
    *(cpv+1)=3; printf("%d\n", v[1]);
    cpv[1]=4;   printf("%d\n", v[1]);
}

并得到这个错误:

constp.c: In function ‘main’:
constp.c:9: error: assignment of read-only location '*(cpv + 4u)'
constp.c:10: error: assignment of read-only location '*(cpv + 4u)'

我知道编译器认为我需要一个const int v[2]与使用const int *iv。如何获得一个常量指针来完成这项工作?

如果您看到错误消息,我什至没有移动指针(例如pv++)。我只是取消引用它,导致一些字节错位。

如果我这样做:

int *pv=cpv;
*(pv+1)=5;  printf("%d\n", v[1]);
printf("%p == %p !?\n", cpv, pv);

我收到此警告,但它有效:

constp.c:9: warning: assignment discards qualifiers from pointer target type
pointer# ./constp 
5
0x601020 == 0x601020 !?

谢谢, 贝科。


移动const预选赛:

int *const cpv=v;

说明:在 C 声明规则中,从标识符开始从右向左读取:“cpv是一个常量指针int“。您的版本将被阅读”cpv是一个指向int持续的”。

注意cpv+1仍然会给你一个指向int after *cpv;制作一个指针const只能防止++, --, += and -= on it.

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

const 指针固定为变量 的相关文章

  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 使用 C# 读取 Soap 消息

  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 如何从ganglia的数据库中获取数据

    我想使用 ganglia 的数据来分析我们的集群 但我不知道 ganglia 的数据库在哪里 以前有人这样做过吗 gmetad 上存储指标数据的是rrd 文件 通常默认路径是 var lib ganglia rrds
  • 中使用 readonly 属性而不改变光标

    如果我有一个
  • HttpWebRequest排队库,保证请求交付

    只是想知道是否存在框架类来处理请求排队 发送请求时 应将其添加到队列中 如果出现问题 没有互联网 则应存储请求 并稍后尝试再次发送 同时 可以创建更多请求 如果仍然没有网络 则所有新请求都应存储在队列中 并在网络恢复时再次发送 打算实现相同
  • 我应该担心 std::vector 的内存碎片吗?

    我应该担心 std vector 的内存碎片吗 如果是这样 有什么方法可以帮助预防吗 我并不总是预测我的程序会在 PC 上运行 它们也可能会在嵌入式设备 游戏控制台上运行 因此我并不总是能够依赖虚拟内存 然后 我再次相信使用动态大小的数组而
  • 如何在android中点击动态创建的编辑文本时获取编辑文本的ID?

    我正在根据项目要求在布局中动态创建视图 视图序列来自 json 当我单击编辑文本时 时间选择器函数会调用在编辑文本中设置时间 但是当我设置编辑文本值时 它会给出上次创建的编辑文本的 ID 这是我的代码 for i 0 i lt alist
  • 使用 system.time() 对 R 代码计时时出现“未找到对象”和“意外符号”错误

    我正在读这本书 R 编程实践 以下代码是直接从书中粘贴的 但不会在 RStudio 中运行 我试图理解为什么 system time output lt rep NA 1000000 for i in 1 1000000 output i
  • “导入日期时间”与“从日期时间导入日期时间”

    我有一个脚本需要在脚本中的不同行执行以下命令 today date datetime date today date time datetime strp date time string Y m d H M In my import我有以
  • 尝试让 powershell 在 C#/Visual Studio 中工作

    我试图学习如何在 C 中使用 powershell 我正在关注本教程 https blogs msdn microsoft com kebab 2014 04 28 executing powershell scripts from c 但
  • 有关于这种类型编程的文献吗?

    在大学里 我选修了一门现代物理学课程 我们在其中学习了狭义相对论 不同的参考系实际上可以观察到一个物体的物理属性是不同的 但又都是不正确的 这让我彻底震惊了 随着时间的推移 这个概念慢慢地改变了我的编程方式 现在我倾向于将类分为两个主要类别
  • 为什么 GCC 警告我这条线“被误导性地缩进,就好像它被 if 保护一样”?

    警告是 home dronz OF apps myApps HexMap src HexMap cpp 48 5 warning this if clause does not guard Wmisleading indentation i
  • 构建所有 csproj 文件,测试项目除外

    在 DevOps 中 您可以创建一个dotnet build任务 其中 项目路径 可以设置为 csproj建造所有项目 这工作得很好 但它 显然 也建立了我的 Test csproj项目 我发现一些帖子提到了排除模式 因此我尝试执行与这些帖
  • 如何在 Notepad++ 中排除双引号内的搜索模式

    我有以下行 我想用空格 制表符 替换空格 但想保留双引号内的空格 我在记事本 上 11 May 2020 10 10 20 0400 GET HTTP 1 1 302 523 52197 url com TLSv1 2 19922 Mozi
  • C++ 0 和 0.0 之间的区别

    C 中0和0 0有区别吗 您应该使用哪个来初始化双精度 Thanks 字面意义0被认为是一个int文字 文字0 0 is a double文字 当分配给一个double 两者都可以工作 因为int可以在扩大转换中进行铸造 然而 铸造0 0
  • 具有动态分区的 CTAS

    我想将包含文本格式的现有表更改为 orc 格式 我能够通过以下方式做到这一点 1 手动创建一个orc格式的表并进行分区 然后 2 使用INSERT OVERWRITE 语句填充表 我正在尝试为此使用 CTAS 创建表 AS Select 语
  • 如何在Javascript中组合多个字典?

    var dictA male 10 female 20 unassigned 30 var dictB male 11 female 21 unassigned 31 var dictC male 12 female 22 unassign
  • 如何在 C# 中打开平板电脑模式屏幕键盘?

    我想使用代码启动新的屏幕键盘 OSK 您可以在任务栏中找到这个 如果没有 您可以通过右键单击任务栏找到它 我已经尝试过常规的 System Diagnostics Process Start osk exe 但我想启动另一个 不是在窗口模式
  • java netcdf 4 教程

    我在这里使用 unidata 网站上最新的 netcdf jar 库 http www unidata ucar edu downloads netcdf index jsp http www unidata ucar edu downlo
  • 访问类受保护字段而不修改原始类

    我正在使用一些公开某些类型的第三方库 由方法返回 这种类型有一些我感兴趣的受保护字段 但是我无法使用它们 因为它们的可见性是受保护的 这是问题的简化 public class A protected object Something pub
  • 提交后挂钩失败(退出代码 3)并输出

    我正在尝试使用提交后脚本远程调用 Jenkins 作业 我目前正在通过 Eclipse Kepler Subversive SVNKit Connector 提交代码 提交后脚本 if svnlook dirs changed r REV
  • const 指针固定为变量

    我不知道如何告诉 C 我想要一个不会移动的指针 它将始终指向同一个数组 也就是说 数组成员不是恒定的 但数组本身是全局的 因此它位于固定位置 所以 当我编码时 include