如果這是一個非常簡單的問題,但我真的生鏽在C和谷歌搜索沒有幫助到目前爲止,我很抱歉。我有一個C函數,它在結構的數組和一個整數:如何獲得一個結構,在一個結構中,並將其分配給一個結構數組
int foo(struct record *records, int n)
{
}
並且還鏈接列表,其中每個節點具有結構:
struct rnode
{
struct record rec;
struct rnode *next;
}
和struct記錄是:
struct record
{
enum recordtype type;
union recordvalue
{
int intval;
char strval[19];
} value;
};
foo(結構記錄,int)我遍歷鏈表並將第一個「n」結構記錄分配到數組中,如:
int foo(struct record *records, int n)
{
int count = 0;
struct rnode *cur = recordlist;
while(cur != NULL)
{
records[count] = cur->rec; //Basically, how do I write this line?
printf("%d\n", records[count].type); //Both these print the correct values
printf("%d\n", records[count].value.intval); //Prints correct values
count++;
}
}
我試圖做: 記錄第[count] = CUR-> REC
其中編譯但是當我執行以下操作:
struct record *records = malloc(sizeof(struct record)*n);
foo(records, n); //This should populate the array records but it isn't.
//If I print record[0].value.intval here I get 0.
但是當我通過&記錄[0]到另一個功能,如:
checkrecord(&record[0]);
其中聲明checkrecord:
checkrecord(const struct record *r)
裏面的函數,r-> type和r-> value.intval都返回0而不是正確的值。
我很確定我正確地將結構記錄存儲到數組中,但我不知道我在做什麼錯了。
我並不是說固執,但問題是checkrecord()函數我沒有在改變的自由,但我可以改變我的參數傳遞給它。
`records [count] = cur-> rec`是對的,但是我沒有通過檢查`&record [1]來得到你想要的結果。你會想要在結構內部的東西,記錄[1] .some_member – nos 2011-02-15 09:14:17
@nos是現貨......`&記錄[1]`只是要求一個指向第一條記錄的指針......它永遠不可能是「結構的*值*」 – 2011-02-15 09:18:57