指向一个数组以获取其所有内容

时间:2013-01-10 10:23:06

标签: c++ c

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

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

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

现在假设我有一个结构:

struct Colors{
float color[4];
};

现在我发现我可以做得很好:

Colors myColor={{*color}};

我也可以这样做:

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

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

首先,我想检查一下这样做是否合法,合法和好。显然,如果你传递一个大型数组,这在语法和输入方面非常方便。

其次,我想验证有关其原因的原因。由于color单独是一个指针,*是一个间接运算符,它检索指向的内存,即数组。所以基本上我们只通过间接调用它的指针来获得整个数组。正确的吗?

3 个答案:

答案 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 ++都不知道数组的长度,因此编译器无法以您希望的方式自动复制数组的任何元素。