当前位置: 首页 > 知识库问答 >
问题:

是否可以定义一个没有temp/aux变量的指针?(或者这会是糟糕的C-编码吗?)

黄淇
2023-03-14

我在试着理解C指针。作为背景,我习惯于使用C#Python3进行编码。

我理解指针可以用来保存变量的地址(编写类似type*ptr=&var;)并且递增指针等同于递增该对象类型type的对象数组的索引。但我不明白的是,您是否可以使用类型的指针和延迟对象(例如int)而不引用已经定义的变量。

我想不出这样做的方法,大多数C/C++指针的例子似乎都使用它们来引用变量。所以我所问的可能是不可能的,或者是糟糕的编码实践。如果是这样,了解原因会很有帮助。

例如,为了澄清我的困惑,如果不使用预定义的硬编码变量就没有办法使用指针,那么你为什么要使用指针而不是直接使用基本对象,或者对象的数组呢?

非常感谢任何建议!

// Learning about pointers and C-coding techniques.

#include <stdio.h>

/* Is there a way to define the int-pointer age WITHOUT the int variable auxAge? */

int main()  // no command-line params being passed
{
    int auxAge = 12345;
    int* age = &auxAge;
    // *age is an int, and age is an int* (i.e. age is a pointer-to-an-int, just an address to somewhere in memory where data defining some int is expected)
    // do stuff with my *age int e.g. "(*age)++;" or "*age = 37;"
    return 0;
}

共有1个答案

龙新荣
2023-03-14

是的,您可以使用动态内存(也称为“堆”)分配:

#include <stdlib.h>

int * const integer = malloc(sizeof *integer);
if (integer != NULL)
{
  *integer = 4711;
  printf("forty seven eleven is %d\n", *integer);
  free(integer);
  // At this point we can no longer use the pointer, the memory is not ours any more.
}

这要求C库从操作系统中分配一些内存,并返回一个指向它的指针。分配sizeof*integer字节使分配完全适合整数,然后我们可以使用*integer取消引用指针,这与直接引用整数非常相似。

 类似资料:
  • 我想用Ansible复制大文件。目标服务器有一个具有足够存储空间的专用分区。我注意到ansible使用由remote_tmp变量定义的临时目录。 谢谢你的回答。

  • 问题内容: C#核心库中是否内置可以为我提供不可变字典的内容? 类似于 Java的 东西: 只是为了澄清一下,我并不是要阻止键/值本身被更改,而只是希望字典的结构不会停止更改。如果将IDictionary的任何mutator方法称为(),我都会希望它们快速而响亮地失败。 问题答案: 不,但是包装器很简单: 显然,如果要允许修改值,可以更改上面的this []设置器。

  • 我的下一个想法是将时态数据作为分区密钥的一部分。这似乎是有意义的,因为我们每天都在批量导入大量的时间戳数据。而且,99%的针对该数据库的查询都包含日期范围。我提出了一个派生的抽象值,在上面的文档中标记为。此值将帐户id与时间因子(每个电话的年和月)组合在一起。使用该方案,每个租户每年将获得12个分区,而不是整个帐户的单个分区。每个租户的容量仍然不同,所以我们仍然会有一些大的分区和一些小的分区。但是

  • 问题内容: 我当然熟悉和类。但是,我只需要HTML样式的编码。(我不想替换为,等等)。我不知道任何内置JDK的类都可以进行HTML编码。有一个吗?我知道其他选择(例如,Jakarta Commons Lang’StringEscapeUtils’ ,但是我不想在需要此项目的项目中添加另一个外部依赖项。 我希望在最近的JDK(又名5或6)中添加一些可以执行我不知道的操作的东西。否则我必须自己动手。

  • IE 可能会失败。 C11附件J.2内容如下

  • 举例说明 Laravel 文档和网上的各种教程,会教授我们一个任务可以使用好几种方法来完成。对于框架设计来说,灵活是件好事,能提供给开发者不同的选项,能让框架适用更多的用户场景。但是对于团队的协同开发来说,大部分时候,更多的选项反而是累赘。 下面来举一个例子说明,假如你在为项目开发 用户授权 相关功能,仅 注册用户权限 这块你就会有以下三个选项: 选项 1. 使用闭包: 你可以在 AuthServ