c++基础问题
thinking in c++中有一段简单程序
typedef struct STASHtag{
int size;/* */
int quantity;
int next
unsigned char* storage;
} Stash;
我的理解是:上面定义了一个结构STASHtag,并申明了一个结构变量Stash.
但是下面的引用让我感觉我的理解是错的.
void initialize(Stash* s,int Size);
....
显然这里把Stash当成一种类型而不是变量了。请问正确的理解是什么.
问题点数:100、回复次数:9Top
1 楼karma(无为MS MVP)回复于 2002-04-18 09:50:51 得分 25
typedef struct STASHtag{
....} Stash;
===>
Stash== struct STASHtag
Stash 是struct STASHtag结构的另名Top
2 楼despird(砉箟)回复于 2002-04-18 09:51:48 得分 20
Stash是类型没错。
typedef从功能上有点象define,他定义了一个结构STASHtag,然后把这个结构赋于一个简单的名称Stash,Stash是这种结构的一个类型。因为有时候需要这样定义。
typedef struct STASHtag{
int size;/* */
int quantity;
int next
unsigned char* storage;
} Stash *pStash;
这里Stash, pStash都是这个结构的类型。
Top
3 楼ytweiwei(又穷又丑农村户口!!!!)回复于 2002-04-18 09:52:29 得分 5
对,引用的时候应用Stash就可以了Top
4 楼code_fan(codefan)回复于 2002-04-18 09:52:46 得分 20
类型定义
typedef struct STASHtag{
int size;/* */
int quantity;
int next
unsigned char* storage;
} Stash;
等同于
struct STASHtag{
int size;/* */
int quantity;
int next
unsigned char* storage;
};
typedef STASHtag Stash;
Top
5 楼chamcham_wh(wh)回复于 2002-04-18 09:53:14 得分 10
因为用了TYPEDEF,所以是类型Top
6 楼despird(砉箟)回复于 2002-04-18 09:53:15 得分 0
上面有误,Stash *pStash之间应有逗号。Top
7 楼jishiping(JSP 季世平)回复于 2002-04-18 09:55:16 得分 20
你的理解是错误的。上面定义了一个结构STASHtag,同时定义了一个数据
类型 Stash。 而 Stash 实际上就是结构STASHtag的另一个名字。因此
void initialize(Stash* s,int Size); 就相当于
void initialize(struct STASHtag* s,int Size);
不过,编译器会做类型检查,认为 struct STASHtag 和 Stash 不是一个
类型。但是它们在本质上是一样的。
Top
8 楼blue_lemon(小猪)回复于 2002-04-18 10:02:43 得分 0
没有问题。
该定义相当于:
struct STASHTag{...}; //定义了一个结构
typed STASHtag Stash; //用Stash代替结构体STASHtag
上面也可定义为:
struct STASHTag{...}; //定义了一个结构
#define Stash struct STASHtag; //用Stash代替结构体STASHtag
这样声明一个结构体变量使用如下形式:
Stash s; //s是一个STASHtag结构体变量
否则得做如下声明:
struct STASHtag s;
Top
9 楼opentuxedo(借哥哥的号来试试)回复于 2002-04-18 10:09:59 得分 0
以上程序就等于
struct STASHtag{
int size;/* */
int quantity;
int next
unsigned char* storage;
} ;
typedef STASHtag Stash;
Top




