我有以下结构
typedef struct _LSHFunctionT
{
double *a;
double b;
} LSHFunctionT, *PLSHFunctionT;
我的问题是;这两个声明有什么区别
PLSHFunctionT myPointer1;
和
LSHFunctionT *myPointer2;
如果没有,那么为什么人们明确地使用其中两个(LSHFunctionT和* PLSHFunctionT)。为什么不直接使用LSHFunctionT。
对于以下两个声明,它是否采用相同的方式
PLSHFunctionT *myPointer3;
和
LSHFunctionT **myPointer3;
答案 0 :(得分:2)
typedef struct _LSHFunctionT
{
double *a;
double b;
} LSHFunctionT, *PLSHFunctionT;
是的,PLSHFunctionT x;
等于LSHFunctionT* x;
是的,PLSHFunctionT* x;
等于LSHFunctionT** x;
typedef
的目的是为现有类型指定新名称。您可以定义typedef int lol;
并声明变量lol i;
,但编译器无论如何都会将其视为int
。
您还应该检查以下问题:
When should I use typedef in C++?
Why should structure names have a typedef?
希望这有帮助。
答案 1 :(得分:2)
是的,它们完全相同。
定义指针类型的一个很好的理由是复杂的表达式。例如,如果你有一个引用指针的函数,你会发现哪个更容易理解?
void foo(PLSHFunctionT & ref);
void foo(LSHFunctionT * (&ref));
我甚至不确定第二个语法是否正确!
答案 2 :(得分:1)
区别在于重点。通常不明确地写*可以指示PLSHFunctionT被设计为用作句柄(不知道/访问结构元素)。如果*显式写入,如在LSHFunctionT * myPointer中,则可能表示要用于访问值的数组或结构。
答案 3 :(得分:1)
表面上两者没有区别。但是,使用指针typedef,无法将其声明为指向const的指针,只需将const指针指向非const。
例如你可以说
const LSHFunctionT* const_ptr;
但是const PLSHFunctionT const_ptr2;
使指针成为const,而不是指针。
最后请注意,在C ++中,整个事情是合法的,因为以_<capital>
开头的名称是为实现保留的,而且typedef几乎从不以这种方式使用。
答案 4 :(得分:0)
我似乎没有区别。有不同的编程风格。
答案 5 :(得分:0)
是。它们完全相同,即使在第二种情况下也是如此。
如果我想声明一个指针,我个人更喜欢明确地使用*
。在大多数情况下,它使代码可读。使用指针类型typedef
通常会降低可读性,但有时可能会增加可读性,尤其是在使用Windows API时。
答案 6 :(得分:0)
这些声明是一样的。在某些情况下,指针类型的方法可以提高代码的可读性。有人可能会说这个:
PLSHFunctionT calls[];
比这更容易阅读:
LSHFunctionT *calls[];