1.值数据类型存储在栈中,引用数据类型值存储在堆中,其引用存储在栈中。
举个例子:(以c++为例),其它语言大同小异
基础数据类型:
//在栈中会分配内存存储i,也就是说变量i有一块地址,里面存储的值是10int i = 10;
引用数据类型:
在堆中会开辟一块内存存储数组{1,2,3,4}在栈中会开辟一块内存存储变量arr,arr里面存储的值是{1,4}在堆中的地址,需要注意的是arr本身也是有其自己的地址,只不过该地址存储的是arr本身int arr[] = {1,2,1)">3,1)">4};
2.值数据类型在参数传递中是值传递,也就是传递的值给形参,而在函数里形参的改变不影响实参的值;引用数据类型在参数传递中是引用传递,也就是传递的值是地址,而在函数里形参的改变会影响实参的值。当然,也可以将值数据类型的地址作为实参传给形参,这样也相当与是一种引用传递。
举个例子:(以c++为例),其它语言大同小异
值传递:
#include <iostream>using namespace std;voID swap(int num1,int num2) { cout << "交换之前num1的值:" << num1 << endl; cout << 交换之前num2的值:" << num2 << endl; int tmp = num1; num1 = num2; num2 = tmp; cout << 交换之后num1的值:交换之后num2的值: endl;} main() { int a = 1; int b = 2; cout << 实参未传入之前a的值:" << a <<实参未传入之前b的值:" << b << endl; swap(a,b); cout << 实参传入之后a的值:实参传入之后b的值: endl; system(pause"); return 0;}
输出:
引用传递(利用值传递的地址) :
#include <iostream>int* num1,1)">int*" << *num1 <<" << *num2 <<int tmp = *num1; *num1 = *num2; *num2 = endl;}int* p1 = &a; int* p2 = &b; cout << endl; swap(p1,p2); cout << ;}
输出:
引用传递(引用数据类型本身,在c++中,数组是一种引用数据类型):
voID transform( arr[]) { arr[0] = 9;} main() { int arr[] = { 4,1)">5 }; 利用函数将数组第一个值改为9 transform(arr); cout << arr[0] <<;}
输出:
3.参数传递时使用引用传递,即传递地址,可以减少内存消耗。在c++中,指针类型在32位系统中都是占4个字节,在64位 *** 作系统中都是占8个字节。
总结以上是内存溢出为你收集整理的编程语言中的值数据类型和引用数据类型之间的区别全部内容,希望文章能够帮你解决编程语言中的值数据类型和引用数据类型之间的区别所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)