3

したがって、配列は最初の要素へのポインターです。

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

したがって、単純に;colorを指します。&color[0]

次のような構造体があるとします。

struct Colors{
float color[4];
};

今、私はこれを非常にうまく行うことができることを発見しました:

Colors myColor={{*color}};

これを行うこともできます:

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

私は 1 つの要素だけを指していますが、構造体は 4 を想定しているため、この要素を無視し続けます。

まず、それが問題なく、合法で、問題ないことを確認したいと思います。明らかに、大きな配列を渡す場合、これは構文と入力において非常に便利です。

第二に、これが機能する理由についての推論を検証したいと思います。coloralone はポインタであるため、ポインタが指すメモリ*、つまり配列を取得する間接演算子です。したがって、本質的には、間接参照でポインタを呼び出すだけで配列全体を取得します。正しい?

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。したがって、初期化リストの長さは 1 項目のみです。

C も C++ も配列の長さを認識していないため、コンパイラが配列の要素を希望どおりに自動的にコピーすることはできません。

于 2013-01-10T10:35:41.123 に答える