是否可以创建object类型的指针而不是class或structure类型的指针?

是否可以创建object类型的指针而不是class或structure类型的指针?,c,C,很抱歉,如果这个问题措词不当(请编辑它,如果它能让读者更容易理解我。) 我是oop新手,正在学习一些C代码。最后一行代码是什么意思?有没有一种方法可以用不同的方式(我刚刚编造了这个词)来写它 typedef struct _Song { //some members } Song; Song * pSong=0; 难道不是: _Song * pSong=0; 而不是: Song * pSong=0; …因为Song是一个对象,Song是一个结构。Song不过是struct\u Song的

很抱歉,如果这个问题措词不当(请编辑它,如果它能让读者更容易理解我。)

我是oop新手,正在学习一些C代码。最后一行代码是什么意思?有没有一种方法可以用不同的方式(我刚刚编造了这个词)来写它

typedef struct _Song {
//some members
} Song;

Song * pSong=0;
难道不是:

_Song * pSong=0;
而不是:

Song * pSong=0;

…因为Song是一个对象,Song是一个结构。

Song
不过是
struct\u Song
的别名(这就是开头的
typedef
的意思)。这两种类型之间绝对没有区别


在C++中,句法差异更为明显,因为<>代码>宋诗< /代码>也是<代码>结构>歌曲< /> >的别名。

< P> A<代码> TyPufF创建了一个类型的别名。您可以将它们与结构定义内联编写,以获取结构的短名称。例如

typedef int** int_dbl_ptr;
通常,如果您在没有typedef的情况下定义了
\u Song
,则必须编写
struct\u Song*
,但使用typedef,它只是
Song*

您还可以创建与变量声明内联的结构,例如

struct foo {int bar; int baz; } a, b, c;

创建一个类型为
struct foo
的结构,并声明三个
struct foo
s、
a
b
、和
c

的结构。Marcelo您能详细说明下划线“\ux”的语法含义吗?我的印象是,对于像这样的一些代码,
struct-product{int-weight;float-price;}苹果、香蕉、甜瓜苹果、香蕉和甜瓜是对象。Song不应该是一个类型为_Song的对象吗?@LedZeppelin:
Song
是一个类型(就像Marcelo所说的
struct _Song
的别名),因为它是用
typedef
声明的。下划线没有任何意义。这正是你用来命名结构的。事实上,您不应该使用以下划线开头,后跟大写字母的名称(它们是保留的),但这不会影响我的答案。不,Song不是Song类型的对象。如果你一开始没有写
typedef
,那就太糟糕了。@LedZeppelin。不,您的帖子中的结构有一个typedef,这样,结构的语法就不同了<代码>结构产品{int-weight;float-price;}apple
,在这里,apple确实是一个对象。但是对于
typedef结构产品{int-weight;float-price;}apple
,apple是结构产品的别名,而不是对象。下划线是不相关的。谢谢Rafe,我误解了我在问题中发布的语法。我以为我在结构声明之后创建了一个对象。Song不是一个对象,而是一个typedef。顺便说一下,我删除了C++标签,因为这(即使C++中的可编译)不是C++,而是C代码(但至少你没有提到C/C++)。