[英]I cannot access the elements of an array of structure with ->
我在函數中收到一個小問題,該函數接收結構數組作為參數,當嘗試使用運算符->訪問數組元素時出現問題
#include <stdio.h>
typedef struct{
int order;
}record;
void entry(record*reg, size_t num_regs);
int main(void){
record reg[10];
entry(reg, sizeof reg / sizeof reg[0]);
return 0;
}
void entry(record*reg, size_t num_regs){
size_t i;
for (i = 0; i < num_regs; i++){
reg[i]->order = i;
printf("\n order = %d", reg[i]->order);
}
}
如果嘗試編譯,則會引發此錯誤
*error #2140: Type error in argument 1 to 'ingreso'; expected 'registro * *' but found 'registro *'.*
因為它會引發此錯誤以及如何解決?
當您將[]用作指針時,您已經有一個數據,因此請使用。 代替->
reg[i].order = i;
與printf參數相同。
我像這樣嘗試了您的代碼,並且整個數組的打印都完全正確:
for (i = 0; i < num_regs; i++){
reg->order = i;
printf("\n order = %d", reg->order);
}
您需要了解->
和之間的區別.
在struct
內部訪問數據時的運算符。
sa
僅用於s
是struct
且a
是s
的成員時 sp->a
實際上只是(*sp).a
的簡寫形式。當sp
是指向struct
的指針時,可以使用它,而我們想取消引用該指針並一步訪問struct
的數據。 正如VolAnd所說,您正在使用reg[i]->order
但實際上應該使用reg[i].order
。
如果還不清楚...
使用entry()
函數,您將傳入10個稱為reg
記錄structs
的數組。 您可以通過傳遞指向數組基地址的指針來執行此操作,因此該函數接受record*
類型的指針。
數組的元素是structs
, 而不是struct
指針 ,因此您可以使用reg[i].order
而不是reg[i]->order
訪問它們。
在這里,您正在傳遞數組的地址,並且存儲/收集在指針中。 並且當指針指向數組時,如果使用->運算符訪問結構元素,它將把數組視為指針,並將錯誤拋出為“錯誤:â->(具有'record')的無效類型參數”。
因此,您必須使用(->)運算符的(。)運算符。
for (i = 0; i < num_regs; i++)
{
reg[i].order = i;
printf("\n order = %d", reg[i].order);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.