对指针用法不太明确自己变了一个栈函数,但有个地方一直不明白typedef struct LinkStack{LinkStackPtr top
对指针用法不太明确
自己变了一个栈函数,但有个地方一直不明白
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}LinkStack;
void InitStack(LinkStack *s)
{
s = (LinkStack *)malloc(sizeof(LinkStack));
s->count = 0;
s->top = NULL;
}
int main(void)
{
LinkStack *s;
InitStack(s);
}
我不明白为何这样无法完成对栈的初始化,count没有被赋值,请高人指点!
[解决办法]
- C/C++ code
void InitStack(LinkStack **s){*s = (LinkStack *)malloc(sizeof(LinkStack));*s->count = 0;*s->top = NULL;}int main(void){LinkStack *s;InitStack(&s);}
[解决办法]
LinkStack* InitStack(void)
{
LinkStack *s;
s = (LinkStack *)malloc(sizeof(LinkStack));
s->count = 0;
s->top = NULL;
return s;
}
int main(void)
{
LinkStack* s = InitStack();
}
[解决办法]
基本设计原则之一:
在被调函数中改变实参的值,必须传递实参的地址,无论实参是值变量还是指针变量。
你要修改“实参”的值,就传“实参”的地址,它是指针变量,就传指针变量的地址----so,type *(*形参)
type (*形参)是实参自己的类型,另一个*表示传它的地址
调用函数的表示形式就是function(&实参)----传它的地址,无论它是什么
=================
再完整些
被调函数中:
type *(*形叁)----这是形参定义,表示接受实参的地址
*形参= ------------这是通过指向实参的指针修改实参
调用函数中
function(&实参)-----这是传实参的地址 