关于创建栈时一个奇怪的报错

凤鸣千里天地动 2013-12-21 08:28:15
  #include <stdio.h>
#include <stdlib.h>
struct listnode{
int data;
struct listnode *node;
};
struct liststack{
struct listnode *top;
};
liststack * s_init(void)
{
struct liststack *istack;

istack = (struct liststack*)malloc(sizeof(struct liststack));
if(istack == NULL)
{
perror("malloc():");
}
else
istack->top = NULL;
return istack;
}


int main()
{

return 0;
}

这么写的时候会报错:stack.c:10: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token


 #include <stdio.h>
#include <stdlib.h>
struct listnode{
int data;
struct listnode *node;
};
struct liststack{
struct listnode *top;
};
typedef struct liststack * Pstack;
Pstack s_init(void)
{
Pstack istack;

istack = (Pstack)malloc(sizeof(struct liststack));
if(istack == NULL)
{
perror("malloc():");
}
else
istack->top = NULL;
return istack;
}


int main()
{

return 0;
}
~

而下面这种写法就是正确的,有点不理解啊,求指教
...全文
240 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 17 楼 bijiaoben 的回复:
点进来看看发现特别眼熟,突然发现了自己的回帖。。。。。这帖子还没结?
哈哈,其实是因为我潜水了好久
  • 打赏
  • 举报
回复
引用 16 楼 lyyslsw 的回复:
[quote=引用 15 楼 knight_1900 的回复:] [quote=引用 14 楼 lyyslsw 的回复:] 楼主知道是什么原因了吗?求普及知识
就是结构体的名字如果没有定义别名,像typedefine这样,是不能用来直接定义的,必须家伙桑struct,所以第十行加上struct[/quote]没记得有这样的规定啊,是不是老的版本编译器有这样的规定啊[/quote] 我说的是就这个问题而言,可能说跑了……实际意思就是普通定义,定义一个整型 int类型,那如果函数返回值是struct list *,自然就不能光用list *作为返回值,因为他的类型是struct XXX *,我是这个意思,不知道理解有没有偏差
大奶兔白糖 2014-02-12
  • 打赏
  • 举报
回复
点进来看看发现特别眼熟,突然发现了自己的回帖。。。。。这帖子还没结?
Johnblx 2014-02-08
  • 打赏
  • 举报
回复
引用 15 楼 knight_1900 的回复:
[quote=引用 14 楼 lyyslsw 的回复:] 楼主知道是什么原因了吗?求普及知识
就是结构体的名字如果没有定义别名,像typedefine这样,是不能用来直接定义的,必须家伙桑struct,所以第十行加上struct[/quote]没记得有这样的规定啊,是不是老的版本编译器有这样的规定啊
  • 打赏
  • 举报
回复
引用 14 楼 lyyslsw 的回复:
楼主知道是什么原因了吗?求普及知识
就是结构体的名字如果没有定义别名,像typedefine这样,是不能用来直接定义的,必须家伙桑struct,所以第十行加上struct
ForestDB 2013-12-23
  • 打赏
  • 举报
回复
引用 9 楼 knight_1900 的回复:
[quote=引用 7 楼 ForestDB 的回复:] struct liststack * s_init(void) 第10行少了个struct而已。 话说LZ这么贴代码也很坑人,想要copy还得去掉多余的行号。
没办法,我是linux下的vim写代码,配置完了天生带一溜行号,一个一个删太费劲了……[/quote] 或者暂时的:set nonu copy完了之后再:set nu 不就行了?
ForestDB 2013-12-23
  • 打赏
  • 举报
回复
引用 9 楼 knight_1900 的回复:
[quote=引用 7 楼 ForestDB 的回复:] struct liststack * s_init(void) 第10行少了个struct而已。 话说LZ这么贴代码也很坑人,想要copy还得去掉多余的行号。
没办法,我是linux下的vim写代码,配置完了天生带一溜行号,一个一个删太费劲了……[/quote] 你cat不就好了?
  • 打赏
  • 举报
回复
引用 7 楼 ForestDB 的回复:
struct liststack * s_init(void) 第10行少了个struct而已。 话说LZ这么贴代码也很坑人,想要copy还得去掉多余的行号。
没办法,我是linux下的vim写代码,配置完了天生带一溜行号,一个一个删太费劲了……
大奶兔白糖 2013-12-23
  • 打赏
  • 举报
回复
引用 7 楼 ForestDB 的回复:
struct liststack * s_init(void) 第10行少了个struct而已。 话说LZ这么贴代码也很坑人,想要copy还得去掉多余的行号。
好眼力
Johnblx 2013-12-23
  • 打赏
  • 举报
回复
楼主知道是什么原因了吗?求普及知识
大奶兔白糖 2013-12-23
  • 打赏
  • 举报
回复
引用 9 楼 knight_1900 的回复:
[quote=引用 7 楼 ForestDB 的回复:] struct liststack * s_init(void) 第10行少了个struct而已。 话说LZ这么贴代码也很坑人,想要copy还得去掉多余的行号。
没办法,我是linux下的vim写代码,配置完了天生带一溜行号,一个一个删太费劲了……[/quote] copy之前vim中运行“:set nonu”,copy完了之后vim中运行“:set nu”,这样既可以保持你代码中的行号,你copy出来的代码也没有行号
Sharing_Li 2013-12-23
  • 打赏
  • 举报
回复
引用 7 楼 ForestDB 的回复:
struct liststack * s_init(void) 第10行少了个struct而已。 话说LZ这么贴代码也很坑人,想要copy还得去掉多余的行号。
犀利
ForestDB 2013-12-22
  • 打赏
  • 举报
回复
struct liststack * s_init(void) 第10行少了个struct而已。 话说LZ这么贴代码也很坑人,想要copy还得去掉多余的行号。
Freeman奔跑吧 2013-12-22
  • 打赏
  • 举报
回复
struct liststack *istack; 我从没有看过这么定义结构体指针,好像有点儿奇怪,不过说不上来什么奇怪。或许是我的思维定式吧
Freeman奔跑吧 2013-12-22
  • 打赏
  • 举报
回复
引用 4 楼 knight_1900 的回复:
[quote=引用 2 楼 u012259623 的回复:] struct liststack *istack; 我从没有看过这么定义结构体指针,好像有点儿奇怪,不过说不上来什么奇怪。或许是我的思维定式吧
写单链表不经常声明一个新指针么[/quote]但我一般是先typedef 结构体 *liststack,然后定义新指针直接liststack listack;
  • 打赏
  • 举报
回复
其实这个栈的实现思路是对的,我就是不明白这个语法错误
  • 打赏
  • 举报
回复
引用 2 楼 u012259623 的回复:
struct liststack *istack; 我从没有看过这么定义结构体指针,好像有点儿奇怪,不过说不上来什么奇怪。或许是我的思维定式吧
写单链表不经常声明一个新指针么
  • 打赏
  • 举报
回复
引用 1 楼 u010420013 的回复:
struct listnode { int data; struct listnode *node; }; struct liststack { struct listnode *top; }; typedef struct { int StuNumber; char Name[20]; char sex[10]; int age; int Grade; }DATA; typedef struct Node { DATA data[MAXNUM]; int top; //struct Node *nextNode; }StackType; 这个是 我以前自己写的,我怎么看,怎么觉得你写的我看不懂你想干什么呢?
奥,你是把栈的结构和链表节点放一起了,我是专门有一个栈结构放top
loveFluffy 2013-12-21
  • 打赏
  • 举报
回复
struct listnode { int data; struct listnode *node; }; struct liststack { struct listnode *top; }; 不知道为什么我怎么觉得你的这个栈的结构定义好奇怪呢。 typedef struct { int StuNumber; char Name[20]; char sex[10]; int age; int Grade; }DATA; typedef struct Node { DATA data[MAXNUM]; int top; //struct Node *nextNode; }StackType; 这个是 我以前自己写的,我怎么看,怎么觉得你写的我看不懂你想干什么呢?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧