关于C语言结构体成员赋值问题

#definemaxnum20#include<stdio.h>#include<stdlib.h>structstacktype{intstack[maxnum];in... #define maxnum 20
#include<stdio.h>
#include<stdlib.h>

struct stacktype
{
int stack[maxnum];
int top;
};
struct stacktype S;

void InitStack(struct stacktype * s)
{
s = (struct stacktype *)malloc(sizeof(struct stacktype));
s->top = -1; //赋值为-1
}

void main()
{
InitStack(&S);
printf("%d",S.top); //为啥输出后是0??
}
展开
 我来答
心中风情4
2013-09-08 · TA获得超过2247个赞
知道大有可为答主
回答量:1779
采纳率:66%
帮助的人:1074万
展开全部
用指针作为函数参数只能改变指针的值,不能改变指针的地址!。所以void InitStack(struct stacktype * s)中的s是是实参&S的一个拷贝,只是二者指向同一个地址而已,然后函数中改变s指向的地址s = (struct stacktype *)malloc(sizeof(struct stacktype)); 但这与&S没有关系,以为这是两个不同的指针而已,于是再改变s的值就与&S无关了。

默认情况下,S.top应该会输出随机值,因为它根本没有初始化。

忘记了S是全局变量,默认初始为0!
追问
请问那如何在初始化堆栈的那个函数中改变S.top的值呢?即如何初始化S.top,谢啦
追答
void InitStack(struct stacktype * s)
{
//s = (struct stacktype *)malloc(sizeof(struct stacktype)); 把这句去掉即可
s->top = -1; //赋值为-1
}
匿名用户
2013-09-08
展开全部
我看应该是做栈的吧,只是不知道你既然用了数组来实现,为什么又用malloc呢?
可以在main函数里面声明和初始化。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式