4

これが私がやろうとしていることです:

#include <stdio.h>
#include <stdlib.h>

struct myStruct {
    int myVar;
}

struct myStruct myBigList = null;

void defineMyList(struct myStruct *myArray)
{
     myStruct *myArray = malloc(10 * sizeof(myStruct));

     *myArray[0] = '42';
}

int main()
{
     defineMyList(&myBigList);
}

これを実現するための簡単な C プログラムを作成しています。GNU99 Xcode 5.0.1 コンパイラを使用しています。私は多くの例を読みましたが、コンパイラはstructタグをどこで使用するかについて意見が分かれているようです。structコマンド内で参照を使用しても、まったくsizeof()認識されないようですstruct

4

5 に答える 5

4

コードにいくつかのエラーがあります。成功する:

struct myStruct *myBigList = NULL; /* Pointer, and upper-case NULL in C. */

/* Must accept pointer to pointer to change caller's variable. */
void defineMyList(struct myStruct **myArray)
{
     /* Avoid repeating the type name in sizeof. */
     *myArray = malloc(10 * sizeof **myArray);

     /* Access was wrong, must use member name inside structure. */
     (*myArray)[0].myVar = 42;
}

int main()
{
     defineMyList(&myBigList);
     return 0; /* added missing return */
}

基本的に、キーワードを使用しstructない限り、キーワードを使用する必要がtypedefあり、グローバル変数myBigListの型が間違っていました。

于 2013-11-13T08:29:10.737 に答える
2

これは、構造体名が自動的に型名に変換されないためです。C (C++ ではない) では、型名を明示的に typedef する必要があります。

どちらかを使用

struct myStruct instance;

型名 OR typedef を使用する場合、このようになります

typedef struct {
    int myVar;
} myStruct;

myStructは、int やその他の型と同様の型名として単純に使用できるようになりました

これは C でのみ必要であることに注意してください。C++ は、各構造体/クラス名を自動的に typedef します。

this を同じ型へのポインターを含む構造体に拡張する場合の良い規則はhere です

于 2013-11-13T08:25:15.317 に答える
1
    sizeof(struct myStruct)

また

    typedef struct myStruct myStrut;
    sizeof(myStruct)
于 2013-11-13T08:31:22.090 に答える
0

次のステートメント

myArray[0].myVar = '42'; 

これでしょうか?

(*myArray)[0].myVar = 42;

myvar は整数です。

于 2016-05-13T04:29:39.233 に答える