因此,数组是指向第一个元素的指针。
float color[4]={rColor, gColor, bColor, alpha};
因此,只是简单的color
指向&color[0]
;
现在假设我有一个结构:
struct Colors{
float color[4];
};
现在我发现我可以做得很好:
Colors myColor={{*color}};
我也可以这样做:
Colors myColor={{color[0]}};
我只指向一个元素,但结构需要4,所以它一直在看这个元素。
首先,我想检查一下这样做是否合法,合法和好。显然,如果你传递一个大型数组,这在语法和输入方面非常方便。
其次,我想验证有关其原因的原因。由于color
单独是一个指针,*
是一个间接运算符,它检索指向的内存,即数组。所以基本上我们只通过间接调用它的指针来获得整个数组。正确的吗?
答案 0 :(得分:1)
结构,联合和数组的初始化器具有特殊属性,即从中省略的元素用0
初始化。
要将整个结构初始化为Colors
,您还可以使用相同类型的任何其他对象。
答案 1 :(得分:1)
如果你像这样初始化颜色
Colors myColor={{*color}};
复制颜色数组的第一个数组元素,其余部分将用零初始化。
答案 2 :(得分: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 ++都不知道数组的长度,因此编译器无法以您希望的方式自动复制数组的任何元素。