你也許在這個複雜...
如果您想要傳遞一個結構數組,它實際上和傳遞任何數組沒有什麼不同。一旦你的陣列,獲得的地址很簡單,讓我給你一個簡單的例子:
比方說,你有這樣的結構:如果你想聲明它靜態地在你的main()
可以
typedef struct s {
int a;
int b;
} mys;
更多信息:
int main(int argc, char *argv[])
{
mys local[3];
memset(local, 0, sizeof(mys)*3); // Now we have an array of structs, values are
// initialized to zero.
// as a sanity check let's print the address of our array:
printf("my array is at address: %#x\n", local);
changeit(local, 3); // now we'll pass the array to our function to change it
現在我們可以有我們的函數,它接受陣列並更改值:
void changeit(mys remote[], int size)
{
int count;
printf("my remote array is at address: %#x\n", remote); //sanity check
for(count = 0; count < size; count++) {
remote[count].a = count;
remote[count].b = count + size;
}
}
一旦返回,我們可以從main()
與其他一些環一樣打印值:
for(int count = 0; count < 3; count ++)
printf("struct[%d].a = %d\n struct[%d].b = %d\n",
count, local[count].a, count, local[count].b);
而且我們會得到一些輸出,看起來像:
>> ./a.out
my array is at address: 0xbf913ac4
my remote array is at address: 0xbf913ac4
struct[0].a = 0
struct[0].b = 3
struct[1].a = 1
struct[1].b = 4
struct[2].a = 2
struct[2].b = 5
所以你可以看到它是相同的數組(相同的地址),這就是你如何獲得結構數組到另一個函數。它清楚了嗎?
你的函數調用是什麼樣的? – dst2
你需要兩次指示燈的指示,而你沒有。顯示實際通話的代碼 – SomeWittyUsername
啊,我忘了:setOperations(&semb,prawa,-1); – marxin