http://blog.youkuaiyun.com/ochonglangzheo/article/details/9788209
我用代码来说明:
- typedef struct{
- int *top;
- int *base;
- int stack_size;
- }SqStack;
- void InitStack(SqStack** s){
- *s = (SqStack*)malloc(sizeof(SqStack));
- if(NULL != *s){
- (*s)->top = (int *)malloc(sizeof(int));
- (*s)->base = (*s)->top;
- (*s)->stack_size = 10;
- }
- }
- int main(int argc, _TCHAR* argv[])
- {
- SqStack *s = NULL;
- InitStack(&s);
- if(NULL != s)
- cout<<s->stack_size<<endl;
- retrun 0;
- }
typedef struct{
int *top;
int *base;
int stack_size;
}SqStack;
void InitStack(SqStack** s){
*s = (SqStack*)malloc(sizeof(SqStack));
if(NULL != *s){
(*s)->top = (int *)malloc(sizeof(int));
(*s)->base = (*s)->top;
(*s)->stack_size = 10;
}
}
int main(int argc, _TCHAR* argv[])
{
SqStack *s = NULL;
InitStack(&s);
if(NULL != s)
cout<<s->stack_size<<endl;
retrun 0;
}
main函数中InitStack(&s),之所以去s的地址是因为如果直接用s而不是s的地址,在InitStack函数中,s就相当于是一个局部变量,对局部变量赋值,不会影响main函数中的s的值的变化,而且,如果用InitStack(s)编译还通不过。在这里用二级指针就相当于把指针的地址传递给了形参,然后在函数中,在s的地址进行操作,在InitStack改变s值,同时在在main函数中会同步