分配给c中结构体中的数组

2023-12-30

我有以下代码:

typedef struct Test {
  long mem[1000];
} Test;

extern Test *test;
int main() {
    Test *test =  (Test *)malloc(sizeof(Test)); 
    test->mem[0] = 1;
    test->mem[1] = 2;
    test->mem[2] = 3;
    test->mem[3] = 4;
    test->mem[4] = 5;
    test->mem[5] = 6;
   return 0;
}

它工作正常,但我想将内存数组的初始化更改为这种方式:

test->mem = {1,2,3,4,5,6};

但是海湾合作委员会给了我这个错误:

错误:“{”标记之前的预期表达式 test->mem = {1,2,3,4,5,6}; 箭头指向左开括号。

它可以是什么?

Thanks!

EDIT:我也尝试这个代码:

long mem[1000] = {1,2,3,4,5,6};
    test->mem = mem;

我从 gcc 收到此错误:

错误:分配给类型“long int[1048576]”时,类型不兼容 来自类型 'long int *' test->mem = mem;

我不允许使用任何 C 函数。


语法something = { initial values }只允许在初始化,其中定义了一个对象,例如:

long mem[1000] = { 1, 2, 3, 4, 5, 6 };

诸如此类的表达式x = value is an 任务并且不能使用初始化语法。

一种替代方法是创建一个临时对象,对其进行初始化,然后将该临时对象的内容复制到目标中:

static const long temporary[] = { 1, 2, 3, 4, 5, 6 };
memcpy(test->mem, temporary, sizeof temporary);

关于问题的编辑:

数组不能被赋值;x = value无效,如果x是一个数组。但是,结构可以被分配,因此另一种选择是创建一个结构作为临时对象,初始化它,然后分配它:

// (After the malloc is successful.)
static const Test temporary = { { 1, 2, 3, 4, 5, 6 } };
*test = temporary;

但请注意,此代码执行了先前代码未执行的操作。我前面展示的示例仅将六个元素复制到数组中。此代码创建一个类型的临时对象Test,其中包含 1000 个元素,其中大部分为零,并且它将所有这些元素复制到*test。即使编译器对此进行了优化并使用一些代码来清除*test它不是实际复制存储在内存中的零,而是比仅仅复制六个元素花费更长的时间。因此,如果您只想初始化一些元素而不关心其余元素,请使用前面的代码。如果您希望初始化所有元素(大部分元素为零),则可以使用后面的代码。 (即便如此,我会考虑替代方案,例如使用calloc代替malloc.)

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

分配给c中结构体中的数组 的相关文章

  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 通过另一个列表更新列表(linq)

    我有类 Data 的对象列表 如下所示 class Data int code string name DateTime date update 我还有另一个课程列表 例如 class RefCodes int old code int n
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 从另一个 FORM 中取回隐藏的 FORM

    我有两种形式Form1 and Form2 我正在打开Form2 from Form1 on button Click Form2 obj2 new Form2 this Visible false obj2 Show 然后我想回来Form
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • 无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉

    Visual Studio 2010 会删除 没有其他词 不安全块中函数参数之一中的数据 什么可能导致此错误 调试器显示以下消息 Cannot obtain value of local or argument as it is not a
  • 如何设置消息队列的所有者?

    System Messaging MessageQueue 类不提供设置队列所有权的方法 如何以编程方式设置 MSMQ 消息队列的所有者 简短的答案是 p invoke 对 windows api 函数的调用MQSetQueueSecuri
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 当 Verb="runas" 时设置 ProcessStartInfo.EnvironmentVariables

    我正在开发一个 C 应用程序 我需要创建变量并将其传递给新进程 我正在使用ProcessStartInfo EnvironmentVariables 新进程必须提升运行 因此我使用 Verb runas var startInfo new
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 解释这段代码的工作原理;子进程如何返回值以及在哪里返回值?

    我不明白子进程如何返回该值以及返回给谁 输出为 6 7 问题来源 http www cs utexas edu mwalfish classes s11 cs372h hw sol1 html http www cs utexas edu
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类

随机推荐

  • 我应该在创建通知之前调用 WakeLock 吗?

    我正在向 Android 应用程序添加通知 目前只有模拟器可供测试 收到通知时 将调用 GCMBaseIntentService 子类 GCMIntentService 中的 onMessage 方法 从这里我创建一个要显示的通知 如果我将
  • Kubernetes集群出站流量IP

    我在 Google Kubernetes Engine 上有一个 Kubernetes 集群 我想为集群的所有传出流量分配一个静态 IP 我已经保留了外部 IP 但无法使用 GCP 控制台将它们分配给集群 我找到了一个使用 cli 执行此操
  • 数据读取器检索数据

    我的数据库中有会员资格和预订表 其中包含属性 cust id 它是会员资格中的主键和预订中的参考键 当我执行数据读取器时 我希望它从会员表中读取 cust id 值 但它是从预订表中读取的 另外 当我比较两个 cust id 值时 1 个取
  • 通过 PayPal iOS SDK 进行 PayPal 实时交易的问题

    我正在为 iPad 开发 iOS 应用程序 版本 7 x 我们需要通过应用程序执行 PayPal 交易 我们包含了 PayPal iOS SDK 并参考他们的示例代码来执行交易 示例代码放置在here https github com pa
  • AWS Lambda 和 .NET Core - 使用 Linux 运行时?

    我正在用 C NET Core 编写 Alexa 技能 以便从 AWS Lambda 函数 在 Amazon Linux 上运行 运行 当我编译项目时 点网发布 我收到错误 找不到框架 NETCoreApp Version v1 0 的运行
  • 需要一点数学帮助来调整图像大小

    我有一个具有 X 宽度和 Y 高度值的图像 现在我想将高度设置为 60px 通过哪种计算我可以计算出图像正确调整大小的高度 我认为你正在努力保持纵横比 如果是这样 请使用以下命令 比率 原始高度 新高度 新宽度 原始宽度 比例
  • 在 Python (Pycharm) 中导入 numpy,安装了 Anaconda

    我对 python 很陌生 我正在尝试编写代码来导出一阶 ODE 因此 我需要某些软件包 例如 numpy 来执行此操作并安装了 Anaconda 当我尝试在 PyCharm 中使用 import numpy 命令时 它不起作用 我收到 M
  • 对产品列表进行分类的算法?拿2

    我问了一个类似的问题 https stackoverflow com questions 695347 algorithm to classify a list of products几周前就问过这个问题 但我没有正确地提出这个问题 所以我
  • 无法将 R 数据帧转换为 Spark DataFrame

    当我尝试使用以下方法将 R 中的本地数据帧转换为 Spark DataFrame 时 raw data lt as DataFrame sc raw data 我收到此错误 17 01 24 08 02 04 警告 RBackendHand
  • 如何禁用 OpenCV 相机中的缓冲区?

    我遇到过这种情况 我使用 OpenCV 来检测相机前面的人脸 并对这些人脸进行一些机器学习 我遇到的问题是 一旦我完成所有处理 并去抓取下一帧 我得到的是过去 而不是现在 意思是 我将读取缓冲区内的内容 而不是实际在相机前面的内容 由于我不
  • 在 C# 中克隆 VSTS 构建定义

    我正在使用 BuildHttpClient 的 GetDefinitionAsync 和 CreateDefinitionAsync 来克隆 VSTS 构建定义 这工作正常 但我想在项目的根文件夹之外的不同文件夹中创建构建定义 我可以通过
  • iOS 圆形渐变

    我的任务是用圆形渐变绘制线条 颜色应按圆圈变化 然后添加动画 现在我画了360层 有一定的间隔和不同的颜色 var colours UIColor UIColor var startAngle CGFloat 0 5 Double pi v
  • 无法从正文 onload 调用函数(未捕获的引用错误:未定义启动)javascript

    我有一个 body onload 调用 javascript 中的函数 我已经尝试了很多方法 但控制台只是打印到错误日志 未捕获的引用错误 未定义启动 我认为这可能是一个故障 如果它对您有用 请通知我 我的代码如下
  • 在控制器内创建会话 cookie

    我是 Tomcat servlet 和 Spring Web 的新手 我有 PHP 背景 所以至少可以说我有点迷失方向 我想要一个控制器为我创建一个会话 cookie 有人告诉我 我可以在标准 servlet 中获得这样的会话 protec
  • 下拉菜单:如何停用第一个(选定)选项?

    这是我正在使用的下拉菜单
  • 如何更改 Jenkins 中的 JAR 构建路径?

    我正在通过 Jenkins 构建一个 Java 项目 JAR 正在 C Windows System32 config systemprofile m2 repository com other 文件夹中创建 在 Jenkins 中执行 m
  • WriteConsoleOutputCharacter 导致控制台应用程序崩溃

    当尝试使用写入控制台输出字符 https learn microsoft com en us windows console writeconsoleoutputcharacter函数 应用程序崩溃 COORD pos pos X 0 po
  • 使用 boost::asio::read_async 读取 Protobuf 对象

    我正在使用 Boost asio 编写一个应用程序 其中客户端和服务器交换使用 google proto buffers 序列化的消息 我不知道通过网络发送的序列化消息的大小是多少 proto buf 对象似乎没有任何分隔符 以下是 pro
  • 从单独的类访问 JPanel 组件

    所以我想要一个在菜单页面和主应用程序页面之间切换的 CardLayout 类 但我想在它们自己的类中设计这两个面板 然后在不同的类中添加 ActionListener 和 CardLayout 并让 ActionListener 使用在面板
  • 分配给c中结构体中的数组

    我有以下代码 typedef struct Test long mem 1000 Test extern Test test int main Test test Test malloc sizeof Test test gt mem 0