无法通过引用传递typedef结构

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法通过引用传递typedef结构相关的知识,希望对你有一定的参考价值。

我试图通过引用将自定义类型对象传递给函数,我无法弄清楚我可能做错了什么。我读了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] =值;

答案

a是指针类型,因此您需要取消引用它才能使用它。通常用箭头操作符完成:

a->byte[i] = 0;

由于这只是一个字节数组,您还可以快速“归零”它:

memset(a, 0, 10);

虽然10在你的代码中有多重要,但你应该将它编成常数或#define

另一答案

通过引用传递值时,您需要使用星号来访问结构的al字段,例如:

(*a).byte[0] = value;

很高兴你有 - >作为捷径,所以这将是:

a->byte[0] = value;

当你调用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);
}

以上是关于无法通过引用传递typedef结构的主要内容,如果未能解决你的问题,请参考以下文章

typedef指针好吗?

通过引用 coder.ceval 在结构中传递数组

一道经典面试题:字符串在Java中如何通过“引用”传递

Android 我应该在异步任务中将片段作为弱引用传递吗?

C语言有引用传递吗

通过适配器在片段之间传递数据(Kotlin Android)