好的,所以我遇到了当前任务的问题(相信我这是一个微不足道的部分),因为我们需要用C代码而不是C ++编写,我们不允许更改代码的某些部分。所以我定义了一个结构:
typedef struct someStruct {
int what;
int something[MAX];
int another[MAX];
} someType;
在main()中的我初始化定义的结构中的所有值:
someType whatever, *whatptr;
编辑:当然设置指向结构的指针,试图简化示例的代码它已存在于我的代码中
whatptr = &whatever;
whatever.what = 0;
// initialize both arrays to hold 0 at all indexes
// Then I must call a function progRun()
progRun(); //I need to pass struct 'whatever' in some way
现在progRun()看起来像这样:
void progRun(){
printWhat(&whatever);
if (whatever.what == 0) {
//do stuff
}
}
除了在progRun()函数中传递的参数之外,我无法更改此代码中的任何内容,我可以在printWhat()之前添加内容。我已经尝试将progRun更改为
void progRun(someType *stptr)
然后在main中调用它
progRun(whatptr);
但由于某些原因这会导致堆栈溢出问题,我尝试使用调试器,它只在调用函数时发生。有没有更好的方法将'whatever'结构传递给函数,以便它可以传递到progRun()和printWhat()并且可以访问'whatever.what'?
任何帮助将不胜感激!与此同时,如果可以的话,我会尝试自己解决这个问题。
编辑:代码中的其他内容必定是错误的,即使其他所有内容都已编译并运行完全正常,直到添加此代码。如果我可以分解代码并找出错误,我会更新问题。并且我不能发布整个代码,因为它是一个任务(这不是任务的目标信任我它专注于数据转发等等,只需要让这个基本的东西工作)谢谢大家的帮助。
编辑:结构中用于[MAX]和另一个[MAX]的MAX数量非常大(我离开了我的桌面,我开始这个项目回到家里,我现在正在使用旧的笔记本电脑,可以' t处理大型数组)。下面的所有答案,以及我之前使用的一些东西现在都可以正常工作。答案 0 :(得分:1)
void progRun(someStruct *ptr) {
someStruct whatever2 = *ptr;
printWhat(whatever2);
if (whatever2.what == 0) { ...
}
whatptr = &whatever;
progRun(whatptr);
你的问题是:
您需要将指针传递给whatever
,但您传递的变量(whatptr
)与whatever
完全无关。
您需要先将指针分配给指针变量中的任何内容。
您没有取消引用功能
或者,摆脱指针变量:
void progRun(someType *stptr) {
printWhat(*stptr);
if (stptr->what == 0) { ...
}
progRun(&whatever);
答案 1 :(得分:0)
指示
someType whatever, *whatptr;
是问题所在:
*whatptr
不会指向struct
whatever
,除非您执行以下任务:
whatptr = &whatever;
或者,您可以使用struct
函数在堆上动态分配内存以获取指向whatever
malloc()
的指针,并将malloc返回的指针传递给函数{{1} }:
progrun
在这种情况下,您当然需要使用箭头whatptr = (someType*) malloc ( sizeof(someType) );
if (whatptr == NULL) exit (1);
//whatever you need to do with your code
progrun(whatptr); // call function like this
运算符取消引用指针以访问struct
的成员元素:
->
另外,请查看这些教程以了解这两种方法:
如果您无法更改whatpr->what = 0; // for example
和print
语句,则应将您的if
副本传递给您的函数:
struct
在您的void progRun( someType whatever ){ // <---Passing by copy
printWhat(&whatever);
if (whatever.what == 0) {
//do stuff
}
}
中,您应该像这样调用函数:
main()
并且根本不需要定义和指定someType whatever;
//assign values to members of the struct
progRun(whatever);
的指针。
虽然通过副本将变量传递给函数(特别是当它们是由许多变量组成的对象,例如struct
时)不是一个好的行为: