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