形参影响实参的基础思想《C语音》

如下,举了几个栗子,为C语言新手提供一些求学之路的困惑。

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct Node{
	int data;
}Node;
//尝试改变结构体A指针的值 但未能改变 因为改变的只是栈的临时变量。
void test1(Node *a,Node *b){
	a = b;	
	// 事实上,该行代码未能改变实参 指针A的指向的原因是。
	// 初始化时,形参指向了实参的位置,后来改变形参的指向,但是并不能改变实参的指向!
} 
// 加个引用就可以拿到实参的地址,从而以后对该形参的修改都会影响到实参。相当于采用了隐式二级指针
void test2(Node * &a,Node *b){
	a = b;	
}
/* 这种方法跟test2方法一个效果,但是这种方法的弊端是,
采用了显式二级指针操作,实参传来的不再是直接指针,而是指针的地址。故每次操作都得加个* 
即取到了指针地址,这样就可以对实参指针进行修改了。
 */
void test3(Node ** a,Node *b){
	*a = b;	
}
/* 修改结构体变量的值,但是达不到效果。因为修改的只是函数栈里的临时变量的值,并未能影响实参。
若想改变实参,那么应该用指针方式或者引用的方式修改。*/
void test4(Node &c){
	c.data = 51;
}
int main(){
	Node *a = new Node();
	a->data = 10;
	Node *b = new Node();
	b->data = 100;
	test1(a,b);
	cout<<a->data<<endl;
//	test2(a,b);
	test3(&a,b);
	cout<<a->data<<endl;
	Node c = {50};
	test4(c);
	cout<<c.data<<endl;
	return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值