[英]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.