3

因此,数组是指向其第一个元素的指针。

float color[4]={rColor, gColor, bColor, alpha};

因此,只是简单color地指向&color[0];

现在假设我有一个结构:

struct Colors{
float color[4];
};

现在我发现我可以很好地做到这一点:

Colors myColor={{*color}};

我也可以这样做:

Colors myColor={{color[0]}};

我只指向一个元素,但结构需要 4,所以它一直在寻找这个元素。

首先,我想检查一下这样做是否可行,合法且可以。显然,如果您要传递一个大数组,这在语法和键入方面非常方便。

其次,我想验证为什么这样做有效的原因。因为coloronly 是一个指针,所以 the*是一个间接操作符,它检索指向的内存,也就是数组。所以基本上我们通过间接调用它的指针来获得整个数组。正确的?

4

3 回答 3

1

结构体、联合体和数组的初始化器具有特定的属性,即从其中省略的元素用 初始化0

要初始化整个结构,您Colors还可以使用相同类型的任何其他对象。

于 2013-01-10T10:31:08.240 回答
1

如果你像这样初始化颜色

Colors myColor={{*color}};

您复制颜色数组的第一个数组元素,其余的将被初始化为零。

于 2013-01-10T10:34:21.820 回答
1

使用此测试代码:

#include "stdio.h"

int main(){
    int i;
    int color[4]={1,2,3,4};
    int ted[4]={*color};

    for(i=0;i<4;i++)
        printf("%d ",ted[i]);
    printf("\n");
}

可以轻松验证ted您的代码仅初始化 的第一个元素。这是因为*color仅指向 的第一个元素color。所以初始化列表只有一项。

由于 C 和 C++ 都不知道数组的长度,因此编译器不可能以您希望的方式自动复制数组的任何元素。

于 2013-01-10T10:35:41.123 回答