簡體   English   中英

我無法使用->訪問結構數組的元素

[英]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僅用於sstructas的成員時
  • 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM