将struct数组传递给函数

时间:2016-09-10 05:25:18

标签: c struct

我想只在storeDataHere函数中将a1分配给ana [0],ana 1

在saveData函数内部,只需要将每个data_array [0]传递给storeDataHere函数。

#include <stdio.h>
#include <string.h>
struct Analysis{
    int a;
    int b[10];
};

struct Analysis ana[2];

void storeDataHere(void* res)
{
    // initialize a1;
    struct Analysis a1;
    a1.a = 1;
    memset(a1.b, 0, 10*sizeof(int));

    for(int i=0; i<10; i++)
        a1.b[i] = 1;


    // store a1 into ana[0], ana[1];
    struct Analysis temp = res;
    temp = a1;

}

void saveData(void* data, size_t size)
{

    struct Analysis *data_array = data;
    // pass two struct elements to storeDataHere;
    storeDataHere((void*)data_array[0]);
    storeDataHere((void*)data_array[1]);
}



int main()
{
    // pass struct array ana to saveData
    saveData( (void*)ana, sizeof(ana[0]));

    for(int i=0; i<2; i++)
    {
        printf("\n%d\n", ana[i].a);
        for(int j=0; j<10; j++)
            printf("%d", ana[i].b[j]);
    }

    return 0;
}

以下是输出错误:

enter image description here

如果我保留这种功能结构,如何解决这个问题? (不要改变功能参数)

3 个答案:

答案 0 :(得分:2)

见这里的答案:

https://repl.it/D2Cd

document.getElementById('aboutUs').onclick = function() {

        document.getElementById('newDiv').style.display = "none";
        document.getElementById('iFrame').style.display = "block";
    }

有关详细信息,请参阅链接。快乐的编码!!

答案 1 :(得分:1)

你试图分配一个指向对象的指针,这是不可能的,你应该有一个副本:

// Copy values
struct Analysis temp = *((struct Analysis*)res);

// or
// Copy pointer
struct Analysis *temp = res;

接下来的问题是,将data_array的元素(如data_array[0])传递给函数(根据您的代码),您必须传递整个结构:

storeDataHere((void*)data_array);

答案 2 :(得分:1)

更改(您需要转换void指针然后取消引用):

struct Analysis temp = res;

struct Analysis temp = *((struct Analysis *)res);

另一次修正(施放并传递正确的类型):

storeDataHere((void*)data_array);