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

本文通过C++代码示例详细介绍了静态链表栈(SqStack)的初始化过程,包括使用二级指针传递栈地址的原因及具体实现步骤。通过实例演示了如何分配内存并设置栈的初始大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/ochonglangzheo/article/details/9788209



我用代码来说明:

  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. }  
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函数中会同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值