| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1603 人关注过本帖
标题:求助:c不完全类型?
取消只看楼主 加入收藏
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
 问题点数:0 回复次数:4 
求助:c不完全类型?
c不完全类型是怎么回事?
搜索更多相关主题的帖子: 类型 
2007-09-07 12:36
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
得分:0 

我看一本c语言教材上写的,它说c中指针可以未定义就使用,叫不完全类型
原代码如下:
它在stack.h中用stackCDT定义了一个变量,但stackCDT却是在stack.c中实现的
/*File:stack.h*/
#ifndef _stack_h
#define _stack_h

#include "genlib.h"
typedef double stackElementT;
typedef struct stackCDT *stackADT;

stackADT NewStack(void);

void FreeStack(stackADT stack);

void Push(stackADT stack,stackElementT element);

void ExpandStack(stackADT stack);

stackElementT Pop(stackADT stack);

bool StackIsEmpty(stackADT stack);

bool StackIsFull(stackADT stack);

int StackDepth(stackADT);

stackElementT GetStackElement(stackADT stack,int index);

#endif

/*File: stack.c*/

#include <stdio.h>
#include "genlib.h"
#include "stack.h"

struct stackCDT
{
stackElementT *elements;
int count;
int size;
};

stackADT NewStack(void)
{
stackADT stack;

stack=New(stackADT);
stack->elements=NewArray(InitialStackSize,stackElemmentT);
stack->count=0;
stack->size=/*File: stack.c*/

#include <stdio.h>
#include "genlib.h"
#include "stack.h"


stackADT NewStack(void)
{
stackADT stack;

stack=New(stackADT);
stack->elements=NewArray(InitialStackSize,stackElemmentT);
stack->count=0;
stack->size=InitialStackSize;
return stack;
}

void FreeStack(stackADT stack)
{
FreeBlock (stack->elements);
FreeBlock (stack);
}

void Push(stackADT stack,stackElementT element)
{
if(stack->count==size) ExpandStack(stack);
stack->elements[stack->count++]=element;
}

static void ExpandStack(stackADT stack)
{
stackElementT *array;
int i,newSize;

newSize=stack->size*2;
array=NewArray(newSize,stackElementT);
for(i=0;i<stack->size;i++)
{
array[i]=stack->elements[i];
}
FreeBlock(stack->elements);
stack->elements=array;
stack->size=newSize;
}

stackElementT Pop(stackADT stack)
{
if (StackIsEmpty(stack)) Error("Pop of an empty stack");
return(stack->elements[--stack->count]);
}

bool StackIsEmpty (stackADT stack)
{
return(stack->count==0)
}

bool StackIsFull(stackADT stack)
{
return FALSE;
}

int StackDepth(stackADT stack)
{
return(stack->count);
}

stackElementT GetStackElement(stackADT stack,int index)
{
if (index<0||index>=stack->count)
{
Error("Non existent stack element");
}
return(stack->elements[stack->count-index-1]);
}


2007-09-09 15:30
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
得分:0 

可是在tc下编译时显示无法找到stackCDT,我同学说是因为先载入.h文件


2007-09-10 11:55
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
得分:0 

Roberts的《程序设计抽象思想-c语言描述》的第八章堆栈一节讲的
它说将stackCDT放在.h中是为了对客户隐藏数据结构


2007-09-11 12:49
darice1234
Rank: 1
等 级:新手上路
帖 子:57
专家分:0
注 册:2007-7-30
收藏
得分:0 
哪位大虾帮忙解决下阿

2007-09-12 21:12
快速回复:求助:c不完全类型?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019274 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved