首页 > 解决方案 > 如何在 C 中声明指向结构的指针?

问题描述

我了解到可以通过 3 种不同的方式声明指针:

int* a;
int *b;
int * c;

我更喜欢:

int* a;

在声明指向结构的指针时,这样写是否正确:

struct Card {
   int a;
};
struct Card my_card = { 3, 7 };
struct Card* p = &my_card; 
(*p).a = 8; 

我很困惑,因为我发现它的所有地方都声明如下:

struct Card *p = &my_card;

提前致谢。

标签: cpointersstructuredeclaration

解决方案


如果是某个类型说明符,则可以通过以下任何方式声明T指向该类型对象的指针T

T*p;
T* p;
T *p;
T * p;

例如 if Tis int *then 指针声明看起来像

int **p;
int ** p;
int * *p;
int * * p;

与声明指向结构的指针相同的方式

struct Card*p = &my_card;
struct Card* p = &my_card;
struct Card *p = &my_card;
struct Card * p = &my_card;

注意你可能会写

T ( *p );

但你可能不会写

( T* ) p;

还有另一个微妙之处。如果你会写例如

int* p1, p2

然后变量p1具有类型int *,而变量p2具有类型int而不是int *.

但如果你会写

typedef int * T;

当在这个声明中

T p1, p2;

这两个变量都有类型int *


推荐阅读