是否可以创建object类型的指针而不是class或structure类型的指针?
很抱歉,如果这个问题措词不当(请编辑它,如果它能让读者更容易理解我。) 我是oop新手,正在学习一些C代码。最后一行代码是什么意思?有没有一种方法可以用不同的方式(我刚刚编造了这个词)来写它是否可以创建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的
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++)。