简洁地声明和初始化指针(即指向 int 的指针)

2023-12-27

给定指向 char 的指针,可以执行以下操作:

char *s = "data";

据我了解,这里声明了一个指针变量,为变量和数据分配了内存,后者填充了data\0并且所讨论的变量被设置为指向它的第一个字节(即变量包含可以取消引用的地址)。这是短而紧凑的。

例如,给定 int 指针,可以这样做:

int *i;
*i = 42;

or that:

int i = 42;
foo(&i); // prefix every time to get a pointer
bar(&i);
baz(&i);

or that:

int i = 42;
int *p = &i;

这有点同义反复。它很小并且可以容忍单个变量的一次使用。不过,它不会多次使用多个变量,从而产生代码混乱。

有没有什么方法可以把同样的事情写得干巴巴、简洁呢?这些是什么? 是否有更广泛的编程方法可以完全避免这个问题?也许我根本不应该使用指针(笑话)什么的?


字符串文字是一种特殊情况:它们触发静态内存中文字的创建,并将其作为char大批。请注意,尽管以下内容无法编译42是一个int字面量,因为它不是隐式分配的:

int *p = &42;

在所有其他情况下,您负责分配指向的对象,无论是在自动内存还是动态内存中。

int i = 42;
int *p = &i;

Here i是自动变量,p指向它。

int * i;
*i = 42;

您刚刚调用了未定义的行为。i尚未初始化,因此指向内存中随机的某个位置。然后你分配了42到这个随机位置,后果不可预测。坏的。

int *i = malloc(sizeof *i);

Here i被初始化为指向动态分配的内存块。别忘了free(i)一旦你完成了它。

int i = 42, *p = &i;

以下是如何创建一个自动变量和一个指向它的指针作为一行。i是变量,p指向它。

Edit :看起来像你really希望该变量被隐式且匿名地分配。好吧,你可以这样做:

int *p = &(int){42};

这个东西是一个复合文字。它们是具有自动存储持续时间(或在文件范围内静态)的匿名实例,并且仅存在于 C90 及更高版本中(但不存在于 C++ 中!)。与字符串文字相反,复合文字是可变的,即您可以修改*p.

Edit 2 :添加此解决方案的灵感来自另一个答案 https://stackoverflow.com/a/24806060/3233393(不幸的是,它提供了错误的解释)为了完整性:

int i[] = {42};

这将分配一个具有自动存储持续时间的单元素可变数组。数组的名称,虽然不是指针本身 https://stackoverflow.com/questions/4607128/in-c-are-arrays-pointers-or-used-as-pointers,将根据需要衰减为指针。

但请注意sizeof i将返回“错误”结果,即数组的实际大小(1 * sizeof(int)) 而不是指针的大小 (sizeof(int*))。然而,这应该很少成为一个问题。

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

简洁地声明和初始化指针(即指向 int 的指针) 的相关文章

随机推荐

  • 以编程方式在 WSO2 API Manager 中添加自定义处理程序

    我通过使用 WSO2 API Manager 的自动化流程创建和订阅新的 API出版商 https docs wso2 com display AM190 Publisher APIs and Store https docs wso2 c
  • 识别与给定字符串向量匹配的列索引

    我有一个字符串向量 x lt c a b 我有一个多列矩阵 其中包含该字符串向量中的名称 我想获取与其名称匹配的列号 索引 which colnames sample matrix x 当 x 不是向量而是单个元素时 上面的方法有效 有什么
  • 长整数中单个位的索引(在C中)[重复]

    这个问题在这里已经有答案了 我试图找到一个最佳代码来定位长整数 64 位 中的单个位索引 长整数只有一位设置位 使用C语言 目前 我只是将整个事情移动一位 然后检查零 我读过有关查找表的内容 但它不适用于整个 64 位 我考虑过检查每个 8
  • 将回调方法实现转换为 akka 流源

    我正在与我无法控制的 java 库中的数据发布者合作 发布者库使用典型的回调设置 库代码中的某处 该库是java的 但为了简洁起见 我将在scala中进行描述 type DataType trait DataConsumer def onD
  • 从 AppDelegate 重新加载 tableView

    我有一个非常简单的问题 但我仍在寻找可可的方法 我有一个在 Xcode 中创建的普通 rootViewController 应用程序 在 AppDelegate 中 我有一个更新数据库的函数 当运行时收到推送消息时 didReceiveRe
  • exp init 项目 [11:31:26] zlib:文件意外结束

    当我跑步时exp init Locations它给了我这个错误 npm 6 1 0 exp 55 04 正如 Mandan 所描述的 您还可以导航至 userprofile expo starter app cache文件夹删除blank
  • 如何对占数据 50% 的条形进行着色?

    我正在为一些数据点绘制直方图 其中条形高度是该数据点占整个数据的百分比 x normal size 1000 hist bins np histogram x bins 20 plt bar bins 1 hist astype np fl
  • 从 MS-SQL Server 2008 中的 XML 字段提取值

    我试图从存储在单个 XML 字段中的 MS SQL Server 2008 数据库中提取四条信息 这是我第一次使用 XML 所以我遇到了一些麻烦 这就是为什么我只有要提取的数据 我尝试过使用其他帖子来解决我的问题 但显然没有运气 这四个信息
  • Fiddler 未捕获来自 .Net Core 的流量

    我有一个控制台应用程序 它通过 HTTP HTTPS 调用许多第三方服务 这些服务最初是为在 Net Framework 下运行而编写的 Fiddler 与该版本的应用程序配合良好 捕获所有 HTTP 和 HTTPS 流量 我将应用程序移植
  • Tomcat Jersey Eclipse ClassNotFound org.glassfish.jersey.servlet.ServletContainer

    我正在运行你好世界 http www mkyong com webservices jax rs jersey hello world example 例子 不过我用的是2 7版本 在 maven pom xml 我有
  • 将 symfony 与 postgresql 结合使用

    我正在尝试使用 Symfony 和 PostgreSQL 创建一个网站 我找不到任何说明如何执行此操作的文档 所有文档都假设后端数据库是 mySQL 有人知道该怎么做吗 如果您使用 Doctrine 只需在您的databases yml 中
  • 检测和重定向 SNI 支持的浏览器的最有效代码是什么?

    说吧 我有一个网站mywebsite com 使用 Apache Httpd 托管 现在我想要的是 每当任何用户输入mywebsite com or www mywebsite com如果浏览器支持 SNI 那么它应该重定向到https w
  • 如何检测 32 位 int 的整数溢出?

    我知道这个话题已经被问过好几次了 但是我的问题是关于完整 32 位 int 的溢出 例如 11111111111111111111111111111111 00000000000000000000000000000001 000000000
  • 如何实现仅输入表情符号键盘?

    我想实现自定义条目 Xamarin forms 当用户将焦点放在条目上时 设备将显示表情符号键盘 简短回答 不幸的是 由于 Android 和 iOS 平台的限制 如果不创建自己的键盘是不可能的 长答案 Default behaviour
  • 如何处理实现多个接口的对象的Dtos?

    我们在 WCF 服务接口中使用 Dtos 但当 Dto 表示的业务对象实现多个接口时 我们开始遇到问题 并且我们希望在这些不同的上下文中返回 Dtos 并且还能够处理Dtos 在客户端上是多态的 例如 假设我们有一个接口IBusinessO
  • Android 中的 Proguard 和 Reflection

    我刚刚使用了 proguard 但是我尝试通过反射实例化的类不起作用 我有一个界面 Algorithm 我通过这样的课程 AlgorithmFactory SomeClassThatExtendsAlgorithmImpl class 类是
  • 通过 webpack-dev-server 代理访问时 WordPress 重定向到 siteurl

    这个问题有历史价值 所以我稍微更新一下 这是 Google 中 webpack dev server wordpress redirect 的最高结果 虽然已接受的解决方案适用于 Webpack 2 但它可能不再适用 如果没有的话可以参考我
  • 在 Java HTML 感知组件中使用

    我有以下问题 我使用 JTextPane 显示 HTML 文档 在我的 HTML 文本中有 shy 在 w3 org 上害羞 http www w3 org TR html4 sgml entities html进行软连字符 我的问题是 没
  • CORS 错误 Angular 2 + Express Node

    正面 角度2 public googlesearch ev Event this http get https maps googleapis com maps api place autocomplete json input ev ta
  • 简洁地声明和初始化指针(即指向 int 的指针)

    给定指向 char 的指针 可以执行以下操作 char s data 据我了解 这里声明了一个指针变量 为变量和数据分配了内存 后者填充了data 0并且所讨论的变量被设置为指向它的第一个字节 即变量包含可以取消引用的地址 这是短而紧凑的