c++值传递,指针,引用使用总结

**

更新时间:2020-09-10

**
温故而知新,每次重温一遍知识点,都有新的见解。

参考:
首先需要了解程序的内存是如何分配的
C/C++程序内存的各种变量存储区域和各个区域详解

栈区(stack):由编译器自动分配与释放,存放为运行时函数分配的局部变量、函数参数、返回数据、返回地址等。其操作类似于数据结构中的栈。
堆区(heap):一般由程序员自动分配,如果程序员没有释放,程序结束时可能有OS回收。其分配类似于链表。
全局区(静态区static):存放全局变量、静态数据、常量。程序结束后由系统释放。全局区分为已初始化全局区(data)和未初始化全局区(bss)。
常量区(文字常量区):存放常量字符串,程序结束后有系统释放。
代码区:存放函数体(类成员函数和全局区)的二进制代码。

//main.cpp 
 
int a = 0; 全局初始化区 
 
char *p1; 全局未初始化区 
 
main() 
 
{ 
 
int b;// 栈 
 
char s[] = "abc"; //"abc"在常量区,s在栈上。 
 
char *p2; //栈 
 
char *p3 = "123456"; //123456\0";在常量区,p3在栈上。 
 
static int c =0//全局(静态)初始化区 
 
p1 = (char *)malloc(10); 
 
p2 = (char *)malloc(20); 
 
//分配得来得10和20字节的区域就在堆区。 
 
strcpy(p1, "123456"); //123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 
 
} 

函数何时值传递,何时指针,何时引用传递总结

C/C++的值传递,指针传值和引用传值的区别

C++ 什么时候使用指针?什么时候使用引用?什么时候应该按值传递?

3种传递的区别代码:

//值传递
//void mySwap(int a, int b)
//{
//	cout << "mySwap:\t&a = " << &a << ", \t&b = " << &b << endl;
//}
//指针传递
void mySwap(int *a, int *b)//开辟了新的内存
{
	cout << "mySwap:\t&a = " << &a << ", \t&b = " << &b << endl;
	cout << "mySwap:\ta = " << a << ", \tb = " << b << endl;
}
//引用传递
//void mySwap(int &a, int &b)
//{
//	cout << "mySwap:\t&a = " << &a << ", \t&b = " << &b << endl;
//}
int main()
{
	int n = 15, m = 20;
	cout << "before:\t&n = " << &n << ", \t&m = " << &m << endl;
	cout << endl;

	// 如果是传指针请用这种方式调用:
	mySwap(&n, &m);
	//mySwap(n, m);
	system("pause");

	return 0;
}

函数使用:

需要修改值不需要修改值
指针/引用值传递/引用

~持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值