创建栈时的函数问题
#include<stdio.h>
#include<malloc.h>
#define Stack_Size 100
struct Snode
{
int data[Stack_Size];
int top;
};
void Init_Stack(Snode *t)///2.然后对这里进行修改 void Init_Stack(Snode * &t)这样就可以了。可是我还是不明白。
///这样形参接受的难道是指针的指针??呵呵,还是有点不明白
{
t=(struct Snode *)malloc(sizeof(struct Snode));
t->top=-1;
}
int main()
{
struct Snode *s;
Init_Stack(s);
printf("%d\n",s->top);
return 0;
}
//1.像这样运行时候就会出错。调试发现.s根本没有被分配到内存..
3.呵呵,希望好心人帮忙解释下,如果不麻烦的话能不能介绍片介绍关于函数传值的文章,拜谢
[解决办法]
这个帖子不应该发在这个论坛。
我认为错误的原理是这样的:
1、首先main函数中定义了一个struct Snode * s,假设在内存的0001地址中装了这个指针所指向的内容,那么现在内存的0001地址中的内容是随机的不确定的。
2、main函数中调用了Init_Stack函数,参数传递的时候做了这样的一件事:struct Snode * t=s;
也就是说,假设t在内存中的地址是0002(注意,是和s不同的),那么0002这块内存里所存储的内容和0001中所存储的是一样的了。
3、在Init_Stack函数中,用t申请了一块内存,这一步只能说明0002这块内存里所存储的是所申请的内存的地址。所以这并没有影响0001这块内存里存储的是什么,所以main中最后打印的时候会出错。
所以,若将Init_Stack函数修改为:
void Init_Stack(struct Snode ** t)
{
(*t)->(struct Snode *)malloc(sizeof(struct Snode));
(*t)->top=1;
}
调用时使用: Init_Stack(&s);
则正确。