首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >编程语言中的值数据类型和引用数据类型之间的区别

编程语言中的值数据类型和引用数据类型之间的区别

作者头像
西西嘛呦
发布2020-08-26 15:35:46
6840
发布2020-08-26 15:35:46
举报

1.值数据类型存储在栈中,引用数据类型值存储在堆中,其引用存储在栈中。

举个例子:(以c++为例),其它语言大同小异

基础数据类型:

//在栈中会分配内存存储i,也就是说变量i有一块地址,里面存储的值是10
int i = 10;

引用数据类型:

//在堆中会开辟一块内存存储数组{1,2,3,4}
//在栈中会开辟一块内存存储变量arr,arr里面存储的值是{1,2,3,4}在堆中的地址,需要注意的是arr本身也是有其自己的地址,只不过该地址存储的是arr本身
int arr[] = {1,2,3,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的值:" << num1 << endl;
    cout << "交换之后num2的值:" << num2 << endl;
}

int main() 
{
    int a = 1;
    int b = 2;
    cout << "实参未传入之前a的值:" << a << endl;
    cout << "实参未传入之前b的值:" << b << endl;
    swap(a, b);
    cout << "实参传入之后a的值:" << a << endl;
    cout << "实参传入之后b的值:" << b << endl;
    system("pause");
    return 0;
}

输出:

引用传递(利用值传递的地址) :

#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的值:" << *num1 << endl;
    cout << "交换之后num2的值:" << *num2 << endl;
}


int main() 
{
    int a = 1;
    int b = 2;
    int* p1 = &a;
    int* p2 = &b;
    cout << "实参未传入之前a的值:" << a << endl;
    cout << "实参未传入之前b的值:" << b << endl;
    swap(p1, p2);
    cout << "实参传入之后a的值:" << a << endl;
    cout << "实参传入之后b的值:" << b << endl;
    system("pause");
    return 0;
}

输出

引用传递(引用数据类型本身,在c++中,数组是一种引用数据类型):

void transform(int arr[]) {
    arr[0] = 9;
}

int main() {
    int arr[] = { 1,2,3,4,5 };
        //利用函数将数组第一个值改为9  
    transform(arr);
    cout << arr[0] << endl;
    system("pause");
    return 0;
}

输出:

3.参数传递时使用引用传递,即传递地址,可以减少内存消耗。在c++中,指针类型在32位系统中都是占4个字节,在64位操作系统中都是占8个字节。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档