关于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??
} 展开
#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??
} 展开
2个回答
展开全部
用指针作为函数参数只能改变指针的值,不能改变指针的地址!。所以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是全局变量,默认初始为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函数里面声明和初始化。。。
可以在main函数里面声明和初始化。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询