繁体   English   中英

为什么在 function 内部声明后结构不存在?

[英]Why doesn't struct exist after declaration inside of function?

我已经尝试了很多简单的例子,但没有任何工作。

我的目标是有一个 function 在内部声明一个结构,设置结构的值,然后返回结构。

struct getData(void){
    typedef struct{
        int count1;
        int count2;
    } MyStruct;

    MyStruct myData;

    myData.count1 = 5;
    myData.count2 = 6;

    return myData;
};

int main(void) {
    struct myData = getData()

    printf("count1: %i", myData.count1);
    printf("count2: %i", myData.count2);
}

我发现的每个示例都与此类似,但由于某种原因,它没有找到我的名为 MyStruct 的结构。 确切的错误是:

error: expected identifier or ‘(’ before ‘void’
 struct getData(void){
                ^~~~

我不断收到的错误让我觉得它不喜欢 function 中的结构。

您的问题似乎是对struct关键字的使用感到困惑。 你不需要struct myData来声明一个名为myData的变量,它是struct类型的,因为实际上并没有struct类型。 您所做的是struct myData <SOMETHING><SOMETHING>定义为名为struct myData的新数据类型。 然后你可以说struct myData dat; ,从而声明datstruct myData类型的变量。

你也在顶部展示了同样的困惑,你有struct getData(void) ...你试图将getData声明为 function 返回一个结构,但你真的必须做类似struct myData getData(void)声明一个 function 返回类型struct myData

我认为写你所追求的更标准的方法是这样,使用结构的独立定义,然后使用 function 调用的指针。 As written your code seems to have some scope issues (declaring a struct typedef inside a function, hmmm...) [Incorrect->] plus I don't believe structs can be passed around that way in C, I'm pretty sure你必须使用指针。 [编辑哎呀这是不正确的! 看评论]

#include<stdio.h>

typedef struct {
    int count1;
    int count2;
    } MyStruct;

void getData (MyStruct* myDataPtr) {
    myDataPtr->count1 = 5;    //note pointer access notation ->
    myDataPtr->count2 = 6;
};

int main(void) {
    MyStruct myData;
    MyStruct* sPtr = &myData;  //create pointer to struct, assign to myDaya
    getData(sPtr);            //pass pointer to function
    printf("count1: %i \n", myData.count1);
    printf("count2: %i \n", myData.count2);
}

输出:

count1: 5
count2: 6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM