二级指针作为函数参数传递初始化的一点总结

来源:互联网 发布:还原数据库找不到文件 编辑:程序博客网 时间:2024/05/22 13:01

http://blog.csdn.net/ochonglangzheo/article/details/9788209



我用代码来说明:

[cpp] view plain copy
print?
  1. typedef struct{  
  2.     int *top;  
  3.     int *base;  
  4.     int stack_size;  
  5. }SqStack;  
  6.   
  7. void InitStack(SqStack** s){  
  8.     *s = (SqStack*)malloc(sizeof(SqStack));  
  9.     if(NULL != *s){  
  10.         (*s)->top = (int *)malloc(sizeof(int));  
  11.         (*s)->base = (*s)->top;  
  12.         (*s)->stack_size = 10;  
  13.     }  
  14. }  
  15.   
  16. int main(int argc, _TCHAR* argv[])  
  17. {  
  18.     SqStack *s = NULL;  
  19.     InitStack(&s);  
  20.     if(NULL != s)  
  21.         cout<<s->stack_size<<endl;  
  22.         retrun 0;  
  23. }  
main函数中InitStack(&s),之所以去s的地址是因为如果直接用s而不是s的地址,在InitStack函数中,s就相当于是一个局部变量,对局部变量赋值,不会影响main函数中的s的值的变化,而且,如果用InitStack(s)编译还通不过。在这里用二级指针就相当于把指针的地址传递给了形参,然后在函数中,在s的地址进行操作,在InitStack改变s值,同时在在main函数中会同步