compound-literals相关内容

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

在 C 中,为什么我不能这样做: arrayfn({1.0, 2.0, 3.0}); if arrayfn 是一个接受 double[] 或 double* 类型参数的函数.尝试这个会给我一个语法错误. 有没有一种方法可以让我在 C 中实现这样的目标——生成并立即传递一个在编译时已知的数组——从而避免花费一行代码预先声明和填充它? 解决方案 简短回答:您需要使用 复合文字.类似的 ..
发布时间:2021-11-17 05:06:19 其他开发

有什么方法可以使复合文字在c99中具有可变长度?

我知道通过正常声明数组,可以在运行时确定长度的数组: char buf[len]; 我知道我可以将数组声明为复合线性并将其分配给中途指针: char *buf; .... buf = (char[5]) {0}; 但是,将两者结合起来是行不通的(标准不允许). 我的问题是:有什么方法可以实现以下代码的效果? (请注意len) char *buf; .... buf ..
发布时间:2020-07-20 18:45:36 其他开发

结构vs字符串文字?只读还是读写?

C99标准是否允许写入复合文字(结构)?似乎它不提供对文字字符串的写入.我问这个问题是因为它在 C编程:现代方法,第二版第406页. 问允许指向复合文字的指针似乎使修改文字成为可能.是这样吗? A.是的.复合文字是可以修改的左值. 但是,我不太了解它是如何工作的,以及它如何与您肯定无法修改的字符串文字一起工作. char *foo = "foo bar"; struct b ..
发布时间:2020-07-20 18:44:31 其他开发

数组作为复合文字

在C99中,我们可以将复合文字用作未命名的数组. 但这是文字常量,例如100,'c',123.4f等. 我注意到我可以做到: ((int []) {1,2,3})[0] = 100; 而且,我没有编译错误,并且可以猜测该未命名数组的第一个元素被修改为100. 因此,与复合文字一样,数组似乎是左值而不是常量值. 解决方案 这是一个左值,如果我们查看 如果类型名称 ..
发布时间:2020-07-20 18:43:23 其他开发

为什么C中的复合文字可以修改

通常会将“不可修改"与字面量联系起来 char* str = "Hello World!"; *str = 'B'; // Bus Error! 但是,当使用复合文字时,我很快发现它们是完全可修改的(查看生成的机器代码,您会看到它们被压入堆栈了): char* str = (char[]){"Hello World"}; *str = 'B'; // A-Okay! 我正在 ..
发布时间:2020-05-02 10:35:02 其他开发

如何使用复合文字对任意基数的多个格式化数字执行fprintf()?

我想将多个数字转换为某种表示形式,然后使用*printf()指示符的标志,宽度和精度.首选是避免使用全局缓冲区或static缓冲区.关键问题似乎在于如何为每个转换后的数字提供char[]? fprintf(ostream, "some_format", foo(int_a, base_x), foo(int_b, base_y), ...); 如何使用C11复合文字解决此问题? 如何使 ..
发布时间:2020-05-02 10:34:59 其他开发

为什么使用像CGRectMake这样的函数?

我很好奇为什么像CGRectMake和CGPointMake这样的函数存在并被广泛使用。 when,你可以这样做: (CGRect){{x,y},{width,height }} 肯定这是更高效的(虽然我猜不是太多),因为没有函数调用? 也可以设置原点和大小,如: (CGRect){origin,size} 并混合使用: (CG ..

引用数组复合文字的一生

我最近才知道,我可以实际使用中引用C,我觉得这很有用复合文字数组,但我不明白它是如何工作的。 例如,说我使用的功能,以避免声明一个变量调用一些套接字接口功能,我不计较回报名称的长度,像这样的: INT sockfamily(INT FD) { 结构sockaddr_storage SS; getpeername(FD,(结构sockaddr *)及SS(socklen_t的[1 ..
发布时间:2016-08-23 10:27:49 C/C++

为什么我不能通恒数组作为参数?

在C,我为什么不能做到这一点: arrayfn({1.0,2.0,3.0}); 如果 arrayfn 一些函数,接受类型双[] 或双* 为准。想这给了我一个语法错误。 有没有办法,我可以实现用C像这样的一种方式 - 发电,并立即通过在编译时已知阵列 - 这避免了花线code pre-声明和填充呢? 解决方案 简短的回答:您需要使用一个的复合文字。类似 arrayfn((双[]){1 ..
发布时间:2016-08-18 23:53:56 C/C++