我已经尝试了很多简单的例子,但是没有任何作用。
我的目标是拥有一个在内部声明结构的函数,设置该结构的值,然后返回该结构。
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){
^~~~
我不断收到的错误让我觉得它不喜欢函数内部的结构。
答案 0 :(得分:1)
您的问题似乎与struct
关键字的使用有关。您不需要struct myData
来声明名为myData
的变量struct
,因为实际上并没有struct
类型。您要做的是struct myData <SOMETHING>
将<SOMETHING>
定义为名为struct myData
的新数据类型。然后,您可以说struct myData dat;
,从而声明dat
是类型struct myData
的变量。
您还在顶部展示了同样的困惑,您有struct getData(void)
...您正试图将getData
声明为一个返回结构的函数,但实际上做类似struct myData getData(void)
的事情来声明一个返回类型struct myData
的函数。
答案 1 :(得分:0)
我认为编写您所追求的内容的更标准方法是,使用结构的独立定义,然后对函数调用使用指针。正如您编写的代码似乎存在一些范围问题(在函数内声明结构typedef,hmmm ...)[Incorrect->]而且我不认为结构可以在C中以这种方式传递,我很确定您必须使用指针。 [编辑糟糕,这是不正确的!查看评论]
#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