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

时间:2012-02-06 18:22:27

标签: c++ pointers struct

我有以下结构

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

我的问题是;这两个声明有什么区别

PLSHFunctionT myPointer1;

LSHFunctionT *myPointer2;

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

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

PLSHFunctionT *myPointer3;

LSHFunctionT **myPointer3;

7 个答案:

答案 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[];