4

Here's what I'm trying to do:

#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);
}

I'm writing a simple C program to accomplish this. I'm using the GNU99 Xcode 5.0.1 compiler. I've read many examples, and the compiler seems to disagree about where to use the struct tag. Using a struct reference inside the sizeof() command doesn't seem to recognize the struct at all.

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

这是因为struct name 不会自动转换为类型 name。在 C(不是 C++)中,您必须显式地 typedef 类型名称。

要么使用

struct myStruct instance;

当使用类型名称或 typedef 它像这样

typedef struct {
    int myVar;
} myStruct;

现在myStruct可以简单地用作类似于 int 或任何其他类型的类型名称。

请注意,这仅在 C 中需要。C++ 自动对每个结构/类名称进行类型定义。

将其扩展到包含指向相同类型的指针的结构时,一个很好的约定是here

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

或者

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

为了适用于该数组的所有 10 个元素,该行:

myArray[0].myVar = '42';

应该:

(*myArray)[0].myVar = '42';
于 2014-03-03T18:08:47.513 回答
0

不应该以下陈述

myArray[0].myVar = '42'; 

是这个吗?

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

myvar 是一个整数。

于 2016-05-13T04:29:39.233 回答