繁体   English   中英

这两个与stuct相关的声明之间有区别吗?

[英]Is there a difference between these two stuct-related declarations?

我有以下结构

typedef struct _LSHFunctionT 
{
    double *a;
    double b;
} LSHFunctionT, *PLSHFunctionT;

我的问题是; 这两个声明之间有区别吗?

PLSHFunctionT myPointer1;

LSHFunctionT *myPointer2;

如果没有,那么为什么人们明确地使用其中两个(LSHFunctionT和* PLSHFunctionT)。 为什么不使用LSHFunctionT。

对于以下两个声明,它是否采用相同的方式

PLSHFunctionT *myPointer3;

LSHFunctionT **myPointer3;
typedef struct _LSHFunctionT 
{
    double *a;
    double b;
} LSHFunctionT, *PLSHFunctionT;

是的, PLSHFunctionT x; 等于LSHFunctionT* x;

是的, PLSHFunctionT* x; 等于LSHFunctionT** x;

typedef的目的是为现有类型分配新名称。 你可以定义typedef int lol; 并声明变量lol i; ,但编译器无论如何都会认为它是int

您还应该检查以下问题:
我什么时候应该在C ++中使用typedef?
为什么结构名称应该有typedef?

希望这可以帮助。

是的,它们完全相同。

定义指针类型的一个很好的理由是复杂的表达式。 例如,如果你有一个引用指针的函数,你会发现哪个更容易理解?

void foo(PLSHFunctionT & ref);

void foo(LSHFunctionT * (&ref));

我甚至不确定我的第二个语法是否正确!

重点在于重点。 通常不明确地写*可以指示PLSHFunctionT被设计为用作句柄(不知道/访问结构元素)。 如果显式写入*,如在LSHFunctionT * myPointer中,则可能表示要用于访问值的数组或结构。

表面上两者没有区别。 但是,使用指针typedef,没有办法将它声明为指向const的指针,只是const-pointer-to-non-const。

比如你可以说

const LSHFunctionT* const_ptr; const PLSHFunctionT const_ptr2; 使指针成为const,而不是指针。

最后请注意,在C ++中,整个事情是合法的,因为以_<capital>开头的名称是为实现保留的,而且typedef几乎从不以这种方式使用。

我似乎没有区别。 有不同的编程风格。

是。 它们完全相同,即使在第二种情况下也是如此。

如果我想声明一个指针,我个人更喜欢使用* 在大多数情况下,它使代码可读。 使用指针类型的typedef通常会降低可读性,但有时可能会增加可读性,尤其是在使用Windows API时。

那些声明是一样的。 在某些情况下,指针类型的方法可以提高代码的可读性。 有人可能会说这个:

PLSHFunctionT calls[];

比这更容易阅读:

LSHFunctionT *calls[];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM