[英]Pass struct array to function
我只想在storeDataHere函數內部將ana1分配給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;
}
這是有錯誤的輸出:
如果保留此功能結構,該如何解決? (不更改功能參數)
在這里查看答案:
// use struct Analysis* instead of void*
//
void storeDataHere(struct Analysis* res)
{
int i;
// initialize a1;
struct Analysis a1;
a1.a = 1;
// memset(a1.b, 0, 10*sizeof(int)); no need to memset cause you set later
for (i = 0; i < 10; i++)
{
a1.b[i] = 1;
}
// store a1 into ana[0], ana[1];
*res = a1; // assign value of pointer res to a1
}
// pass array struct to function
void saveData(struct Analysis data[])
{
struct Analysis *data_array = data;
// pass two struct elements to storeDataHere;
storeDataHere(&data_array[0]);
storeDataHere(&data_array[1]); // pass pointer of each element to StoreDataHere
}
請參閱鏈接查看更多細節。 編碼愉快!!
您正在嘗試分配一個指向對象的指針,這是不可能的,您應該擁有一個副本:
// Copy values
struct Analysis temp = *((struct Analysis*)res);
// or
// Copy pointer
struct Analysis *temp = res;
下一個問題是,將data_array
元素(例如data_array[0]
傳遞給函數(根據您的代碼),您必須傳遞整個結構:
storeDataHere((void*)data_array);
更改(您需要先鑄造void指針,然后取消引用):
struct Analysis temp = res;
至
struct Analysis temp = *((struct Analysis *)res);
另一個更正(廣播並傳遞正確的類型):
storeDataHere((void*)data_array);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.