2012-10-23 40 views
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); 

} 
+0

我在接收错误 - main.cpp | 34 |错误:请求'(飞机+ 120u)'中的成员'altitude',它是非班级类型'Flight *'| || ===构建完成:1个错误,0个警告=== | – runners3431

+1

如果这是一个c代码,请使用stdio而不是iostream和名称空间。那些是C++的。 – halfelf

回答

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; 
+0

我何时使用 - >或句号? – runners3431

+0

当我使用*(平面+5) - 我越来越 - |错误:'一元*'的无效类型参数| || ===构建完成:1个错误,0个警告=== | – runners3431

+0

对不起,我错过了一对括号。如果你觉得这很丑,那么你知道为什么你有 - >语法;) – johv

1

您不需要->表示法,因为您已经使用星号取消了指针的引用。简单地做:

*(places + 5).altitude = 5; 

->简写为 “解引用这个结构指针和访问场”,或者:

(*myStructPointer).field = value; 

相同

myStructPointer->field = value; 

您可以使用符号,但(应该)不能同时出现。

0

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

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