- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我拥有的两个结构的简化版本:
struct MyStruct1 {
double d;
}
struct MyStruct2 {
struct MyStruct1* a;
int i;
}
我可以按如下方式初始化第二个结构:
void InitStruct(struct MyStruct2 pMyStruct2) {
static struct MyStruct1 A[] = { {.d=12} , {.d=17} , {.d=1} };
*pMyStruct2 = (struct MyStruct2) { .a = A, .i = 3 };
}
但实际上我必须以这种方式初始化它(因为这个结构又是一个应立即初始化的更大结构的一部分):
void InitStruct(struct MyStruct2 pMyStruct2) {
*pMyStruct2 = (struct MyStruct2) {
.a = (struct MyStruct1[]) {
{.d=12} , {.d=17} , {.d=1}},
.i=3 };
}
两种方法都可以在没有任何警告的情况下进行编译但是第二种解决方案中的数据会损坏。
我认为内部数组不是静态的,因此 .a
指针立即无效。
还有其他方法告诉编译器将数组的数据保留在内存中吗?
最佳答案
C99 standard §6.5.2.5 p6 说:
The value of the compound literal is that of an unnamed object initialized by the initializer list. If the compound literal occurs outside the body of a function, the object has static storage duration; otherwise, it has automatic storage duration associated with the enclosing block.
在这两种情况下,变量都应该正确初始化并且在它们声明的范围内使用有效。
但是,如果您按值从函数返回结构,则指针将变得无效。
这是我用于测试的示例代码。 Valgrind
显示没有错误。
#include <stdio.h>
struct MyStruct1 {
double d;
};
struct MyStruct2 {
struct MyStruct1* a;
int i;
};
struct MyStruct1 A[] = { {.d=12} , {.d=17} , {.d=1} };
struct MyStruct2 b1 = { .a = A, .i = 3 };
struct MyStruct2 b2 = { .a = (struct MyStruct1[]) {
{.d=12} , {.d=17} , {.d=1}
},
.i=3 };
int main( void ) {
struct MyStruct1 B[] = { {.d=12} , {.d=17} , {.d=1} };
struct MyStruct2 b3 = { .a = B, .i = 3 };
struct MyStruct2 b4 = { .a = (struct MyStruct1[]) {
{.d=12} , {.d=17} , {.d=1}
},
.i=3 };
printf("b1->a.d=%1.2f\n", b1.a->d);
printf("b2->a.d=%1.2f\n", b2.a->d);
printf("b3->a.d=%1.2f\n", b3.a->d);
printf("b4->a.d=%1.2f\n", b4.a->d);
}
关于c - 结构初始化期间的静态数组初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18867167/
我想成为 Spark 纱客户(link)。是否需要安装hadoop?还是只安装 yarn 可以吗? (by this link) 最佳答案 No Spark不需要Hadoop即可运行。 Apache
我是一名优秀的程序员,十分优秀!