问题标签 [compound-literals]

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.

0 投票
2 回答
3021 浏览

c - 为什么 C 中的复合文字是可修改的

人们通常会将“不可修改”与字面量相关联

然而,当使用复合文字时,我很快发现它们是完全可修改的(查看生成的机器代码,您会看到它们被推入堆栈):

我正在用clang-703.0.29. 这两个示例不应该生成完全相同的机器代码吗?如果复合文字是可修改的,它真的是文字吗?

编辑:一个更短的例子是:

0 投票
1 回答
146 浏览

c - 为什么我不能将常量数组作为参数传递?

在 C 中,为什么我不能这样做:

ifarrayfn是一些函数,它接受一个类型的参数double[]or double*,无论哪个。尝试这样做会给我一个语法错误。

有没有一种方法可以让我在 C 中实现这样的目标——生成并立即传递一个在编译时已知的数组——从而避免花费一行代码预先声明和填充它?

0 投票
1 回答
84 浏览

c - C - 使用二维数组作为参数

我写了一个很小的c程序。GCC 4.8.5 20150623 (Red Hat 4.8.5-4) 成功编译的代码-std=c99,但给了我一个警告。我无法处理警告,我什至不知道它有什么问题。代码在这里:

警告在这里:

现在,我假设我有一个二维数组:int array[2][3] = {{1, 2, 3}, {3, 4, 5}},并且我有一个函数:int SumOf2DArray(const int array[][3], int rows)

上面代码中的方式是使用指针(int (*pointer)[3] = array),但得到一个警告,我试图array直接使用传递参数,但同样的警告。

如何将数组传递给函数?

0 投票
3 回答
95 浏览

c - 在函数调用的参数中定义新函数、数组、结构等

如果你有一个函数,它采用以下内容:

您如何执行以下操作:

如果这让您感到困惑,在 Java 中,我们通过以下方式做到这一点:

目前,我在 C 中做了以下我讨厌的事情,因为它看起来真的很难看:

0 投票
1 回答
139 浏览

c - 将值直接作为数组传递给 C 中的函数

我有一个函数,它接受一个整数数组作为参数并打印它。

有没有办法像这样传递数组的值

如果我事先知道这些值而不必仅仅为了将它传递给函数而创建一个数组

0 投票
1 回答
698 浏览

c - sizeof 复合文字数组

我正在尝试静态分配一些结构,每个结构都包含两个成员:一个指向结构数组的指针,以及该数组的大小。

这是代码的工作版本:

但不是单独定义数组,然后在定义结构时引用该数组,我想用数组文字初始化指针,以便将其全部包含在结构定义中,以便我认为提高可读性:

是否可以在编译时自动获取该数组文字的大小?(或者我是在滥用语言并使事情变得比应有的更难吗?)

编辑:基于奥拉夫对类似问题的回答和约翰博林格的评论,这就是我最终得到的结果:

0 投票
1 回答
384 浏览

c - 是否可以在没有事先定义的情况下将结构变量作为函数参数传递?

我有两个这样定义的结构(在color.h):

然后我有以下main.c工作:

我希望能够只hsvCol在参数中创建变量,hsv2rgb而不必创建变量并将其作为参数传递。

我已经尝试了以下每一项(代替上面的两行),遗憾的是没有一个编译:(

我的问题是:

  1. 我可以做我想做的事吗(但显然是以不同的方式)?

  2. 如果是1,我该怎么做?

0 投票
2 回答
61 浏览

c - 如何正确地为数组(结构类型)元素赋值?


我在这个 C 代码中得到编译器错误。

错误:函数中的声明语法main()

我猜有一些错误v[2],因为它与外部类相关联,而v[0]v[1]静态类相关联。

但是,我不确定这是唯一的原因还是其他原因?


编辑:我通过删除错误的语法来编辑代码。

0 投票
1 回答
798 浏览

c - C struct 数组元素初始化转换

使用 C99 我正在尝试在函数中执行此操作:

不起作用。所以我尝试了这个...

哪个有效,但它安全吗?难道没有更好的方法来做到这一点吗?

0 投票
2 回答
770 浏览

c - 为什么在使用指针初始化用户定义的结构时需要进行类型转换?

我有这个结构定义:

我尝试使用以下方法创建指向结构的指针:

并像这样为其分配内存:

现在,为了初始化其中的数据项,我尝试了这个语句(从结构变量的通常初始化中得到提示):

但是编译器抛出了一个错误

错误:“{”标记之前的预期表达式

我查了一下,发现我需要像这样对它进行类型转换:

现在它工作正常,但我的问题是,为什么我需要这样做?

我希望编译器已经知道 root 是指向 node_bst 类型结构变量的指针。那么为什么需要对右值进行类型转换呢?

另一个奇怪的事情:

这工作得很好。