问题标签 [array-initialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C - 为结构数组创建初始化宏
我想用一个宏来做到这一点:
我不想为每个缓冲区条目写一行,而是使用
因为这真的很不方便,如果我想做64个左右的条目......
不幸的是,我对 C 预处理器没有任何经验,所以我很好奇:
- 有更好的非宏观解决方案
- gcc 有一个简单的方法来完成这个宏操作
此外,这更像是一个理论方面,是执行速度。AfaIk 第一篇文章中的示例只是一个 memcpy(.data[?], _timer_llists, sizeof(_timer_llists)),而编程方法至少需要一个计数器,可能是最后一种情况的 if 语句,以及一个函数开销(好的,也许是内联的)。另一方面,这将节省 .data 中的空间。
在这种特殊情况下,我使用的是 gcc-avr,但这个问题反复出现在我的脑海中,我希望有一个通用的方法。
c++ - 这些在 C++ 中初始化 C 数组的方式有区别吗?
我想将数组的所有成员初始化为零,或者nullptr
我知道当将至少一个成员初始化为任何值时,所有其他成员都初始化为零,所以如果我这样做:
第一个成员变为6
,其余所有成员均为零初始化。但是我很困惑:
和
我假设没有等号的声明之后的空波浪括号是所谓的零初始化,而不是默认初始化,但也是如此int list[4]{0}
,不是吗?这是否涉及std::initializer_list
幕后?我以为这些只用于非 POD 类型,所以std::initializer_list
这里没有使用吗?
c - 如何仅初始化字符数组的一部分?
我知道 C 的(非常简洁的)数组初始化语法,比如
初始化数组中的一些特定成员,但是有没有办法用字符串初始化整个数组块?像这样:
是否有允许它的内置语法?还是我必须坚持memcpy():
是我目前拥有的;filename是被指控的字符数组,而basename是一个变量字符串。
c# - 声明一个队列数组
我的代码中的语言语法问题是什么?我想声明一个队列数组。这是声明和使用它们的正确方法吗?
c++ - 在数组的初始化中使用前一个元素的值
所以我发现这段代码有效:
这正式合法吗?我以为我在initializer_list
这里做一个,但如果我可以访问以前初始化的元素,这一定是在做聚合初始化。
我试图找到有关此合法性的官方声明,但我似乎找不到。
c++ - 防止在数组初始化程序中将每个整数值指定为无符号
N
考虑以下函数,它引用在编译时推导出的大小数组:
我想用这样的数组初始化器来调用它:
这可行,但我不想u
在每个值之后指定(实际数组可能更长)。我可以对函数签名或在调用站点做些什么来避免这种情况吗?
请注意,我需要数组实际上是内部的无符号类型array_consumer
(而且我真的不想制作副本),因此将签名更改为int const (&source)[N])
不起作用。
c++ - 在编译时分配数组的值并将枚举作为索引(C++)
我正在尝试通过枚举使用 C 风格的数组作为映射,但我不能按部分初始化数组......我将通过代码更好地解释自己:
我有类似的东西:
我有:
这实际上是我想要的方式,即
但是通过这种方式,我必须确保我以相同的顺序声明枚举和数组。我想做这样的事情:
我知道这可以工作,但我需要在一个函数中执行它并调用它,所以运行时间。我想在编译时执行它,因为有永远不会改变的常量值,并且在运行时执行它是一种浪费。
我也知道constexpr
可以通过 lambda 函数做到这一点,但我不知道该怎么做
c++ - 是否允许递归初始化数组?
我有以下代码片段:
是否允许这样的初始化或导致未定义的行为?
三个主要编译器(gcc、clang、msvc)为我42
提供了i[1]
. 因此看起来是合法的,但我想从这个案例的标准中看到一个引用。
c - gcc 编译器报告警告,但 a.out 工作顺利,否则
我正在关注《C Primer Plus》这本书,遇到了这样一段代码:
当我编译它时它会报告错误:
尽管如此,./a.out
工作正常。
我很困惑我应该从错误报告中学到什么?
c - ARM 程序集 memcpy 等效项
我正在查看此函数的汇编输出:
它看起来像这样:
我完全不知道从哪里复制.L4
到堆栈?
我看到堆栈指针被移动了 16B,并且我看到了 的adds
指令'0'+x
,但是哪条指令复制了数据?
抱歉新手问题,谢谢!