1

malloc で使用される構造体にアクセスするためにポインター表記を使用する方法について混乱しています。配列表記を使用できますが、ポインターの構文は何ですか?

  #include "stdio.h"
#include "stdlib.h"

using namespace std;

typedef struct flightType  {

    int altitude;
    int longitude;
    int latitude;
    int heading;

    double airSpeed;

} Flight;

int main() {

    int airbornePlanes;
    Flight *planes;

    printf("How many planes are int he air?");
    scanf("%d", &airbornePlanes);

    planes =  (Flight *) malloc ( airbornePlanes * sizeof(Flight));
    planes[0].altitude = 7;  // plane 0 works

    // how do i accessw ith pointer notation
    //*(planes + 1)->altitude = 8; // not working
    *(planes + 5) -> altitude = 9;
    free(planes);

}
4

3 に答える 3

2

基本的x->yには の省略形です(*x).y

以下は同等です。

(planes + 5) -> altitude = 9

(*(planes + 5)).altitude = 9;

planes[5].altitude = 9;

より具体的な例:

Flight my_flight; // Stack-allocated
my_flight.altitude = 9;

Flight* my_flight = (Flight*) malloc(sizeof(Flight)); // Heap-allocated
my_flight->altitude = 9;
于 2012-10-23T16:54:30.890 に答える
1

->アスタリスクを使用してポインターを既に逆参照しているため、この表記は必要ありません。単に行う:

*(places + 5).altitude = 5;

->は、「この構造体ポインターを逆参照してそのフィールドにアクセスする」の省略形です。または、

(*myStructPointer).field = value;

と同じです

myStructPointer->field = value;

どちらの表記法も使用できますが、両方を同時に使用することはできません。

于 2012-10-23T16:54:37.003 に答える
0

ポインターを逆参照した後、余分な括弧が必要です。

(*(planes + 5)).altitude = 9;
于 2012-10-23T17:06:40.923 に答える