如何使用指针表示法来访问动态结构

时间:2012-10-23 16:51:58

标签: c

我对如何使用指针表示法访问与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);

}

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

您不需要->表示法,因为您已使用星号取消引用指针。只需:

*(places + 5).altitude = 5;

->是“取消引用此结构指针并访问该字段”的简写,或者:

(*myStructPointer).field = value;

相同
myStructPointer->field = value;

你可以使用任何一种表示法,但是(应该)不能同时使用两种表示法。

答案 2 :(得分:0)

取消引用指针后需要一个额外的括号。

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