首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C中声明指向结构的指针?

如何在C中声明指向结构的指针?
EN

Stack Overflow用户
提问于 2021-10-14 16:11:45
回答 4查看 818关注 0票数 3

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

代码语言:javascript
运行
复制
int* a;
int *b;
int * c;

我更喜欢:

代码语言:javascript
运行
复制
int* a;

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

代码语言:javascript
运行
复制
struct Card {
   int a;
};
struct Card my_card = { 3, 7 };
struct Card* p = &my_card; 
(*p).a = 8; 

我感到困惑,因为在我发现的任何地方,它都声明如下:

代码语言:javascript
运行
复制
struct Card *p = &my_card;

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-10-14 16:15:49

你把空间放在哪里并不重要。struct Card* pstruct Card *p同样有效;这只是一个风格的问题,你喜欢哪一个。

我同意第二种形式更常见,但最重要的是在代码中始终使用一种形式。您的老板/教师/其他开发人员也可能有编码风格的标准来指定使用哪种形式。

票数 1
EN

Stack Overflow用户

发布于 2021-10-14 16:15:45

如果T是某种类型说明符,那么指向T类型对象的指针可以通过下列任何一种方式声明

代码语言:javascript
运行
复制
T*p;
T* p;
T *p;
T * p;

例如,如果Tint *,那么指针声明可以如下所示

代码语言:javascript
运行
复制
int **p;
int ** p;
int * *p;
int * * p;

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

代码语言:javascript
运行
复制
struct Card*p = &my_card;
struct Card* p = &my_card;
struct Card *p = &my_card;
struct Card * p = &my_card;

注意,你可以写

代码语言:javascript
运行
复制
T ( *p );

但你不能写

代码语言:javascript
运行
复制
( T* ) p;

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

代码语言:javascript
运行
复制
int* p1, p2

然后变量p1的类型为int *,而变量p2的类型为int,而不是int *

但如果你要写

代码语言:javascript
运行
复制
typedef int * T;

在本声明中

代码语言:javascript
运行
复制
T p1, p2;

这两个变量的类型都是int *

票数 3
EN

Stack Overflow用户

发布于 2021-10-14 16:19:08

int *aint* a更有意义。在C中,*a可以读取为“a的内容”,因此int *a可以被读取为“a的内容是整数”,就像int a读取“a是整数”一样。当其他答案清除时,空格在这里并不重要--它们对编译器来说都是一样的。

这种书写方式在声明多个指针变量(如int *a, *b )时也更有意义。编写int* a, b并期望ab都是int指针很容易出错。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69574009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档