我试图通过引用将自定义类型对象传递给函数,但我无法弄清楚我可能做错了什么。我阅读了How do you pass a typedef struct to a function?以及其他参考资料,并且发誓我已经做到了这一点。我清除了我正在做的所有其他事情,即使这个斯巴达代码也会抛出5个错误。帮帮我,Stackexchange;你是我唯一的希望!
目标只是能够改变对象中数组中的值。
#include <stdio.h>
#include <math.h>
typedef struct structure {
char byte[10];
char mod;
} complex;
void simpleInit (complex *a, char value) {//put the value in the first byte and zero the rest
a.byte[0] = value;
char i;
for (i = 1; i < 10; ++i) {
a.byte[i] = 0;
}
a.mod = 1;
}
void main () {
complex myNumber;
char value = 6;
simpleInit (myNumber, value);
}
当我尝试运行此操作时,我收到此错误并且类似于:
test2.c:10:3:错误:在非结构或联合的内容中请求成员'byte'
a.byte [0] = value;
答案 0 :(得分:2)
a
是指针类型,因此您需要取消引用它才能使用它。通常用箭头操作符完成:
a->byte[i] = 0;
由于这只是一个字节数组,你也可以快速“归零”它:
memset(a, 0, 10);
虽然您的代码中10
有多重要,但您应该将其编入常量或#define
。
答案 1 :(得分:2)
当您通过引用传递值时,您需要使用星号来访问结构的al字段,例如:
(*a).byte[0] = value;
很高兴你有 - &gt;作为捷径,所以这将是:
a->byte[0] = value;
另外别忘了打电话给&amp;致电simpleInit
时,(地址)运营商。
#include <stdio.h>
#include <math.h>
typedef struct structure
{
char byte[10];
char mod;
} complex;
void simpleInit (complex *a, char value)
{
char i;
a->byte[0] = value;
for (i = 1; i < 10; ++i) {
a->byte[i] = 0;
}
a->mod = 1;
}
int main()
{
complex myNumber;
char value = 6;
simpleInit (&myNumber, value);
}