您遇到的困難是因爲您沒有在您的Init
函數中創建3指針類型struct Ex
。您只是創建一個指向的內存塊,該內存塊足夠容納3個結構體Ex。這很好,但不能依賴正常的數組語法來傳遞或訪問ex
中的值。 您負責在ex
內提供指向您想要的任何值的指針地址。
以下是您的代碼的一個簡單示例。 Init
已被更改爲採用的附加參數數字結構爲和創建大小的初始值a
和b
和b
的初始值。
個人而言,我發現將main
中的原始結構創建爲struct Ex **ex
然後將該地址作爲三指針傳遞給Init
很容易,但這取決於您。你們的做法保持一致,看看下面的例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Ex
{
int a;
int b;
};
/* simple copy funciton */
void Copy(struct Ex *ex1, struct Ex *ex2)
{
memcpy (ex1, ex2, sizeof (struct Ex));
}
/* arguments, address of *ex, num to create, initial values .a=va, .b=vb */
void Init(struct Ex **ex, size_t n, int va, int vb)
{
size_t i = 0;
size_t offset = sizeof **ex;
*ex = malloc (n * offset);
struct Ex *ex2 = malloc (sizeof *ex2);
ex2-> a = va;
ex2-> b = vb;
for (i = 0; i < n; i++)
Copy (*ex + i * offset, ex2);
}
int main (void) {
struct Ex *ex = NULL;
size_t offset = sizeof *ex;
size_t i = 0;
Init (&ex, 3, 5, 6); /* initialize 3 ex, with initial values of 5, 6 */
for (i = 0; i < 3; i++)
printf ("\n (ex +%2lu)->a : %d\n (ex +%2lu)->b : %d\n",
i * offset, (ex + i * offset)->a, i * offset, (ex + i * offset)->b);
return 0;
}
輸出
$ ./bin/structinitcopy
(ex + 0)->a : 5
(ex + 0)->b : 6
(ex + 8)->a : 5
(ex + 8)->b : 6
(ex +16)->a : 5
(ex +16)->b : 6
不要投malloc'的'結果在C – crashmstr 2015-03-31 15:19:31
'&(*防爆+ 1) '< - 你的意思是'ex'和一個普通的'e'? – Michael 2015-03-31 15:20:23
@crashmstr你說的很對,但是OP又說了'Func.cpp'......令人困惑。 – 2015-03-31 15:20:23