栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ - 值拷贝&地址拷贝

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ - 值拷贝&地址拷贝

C/C++知识点

值拷贝&地址拷贝 变量拷贝

在传入参数时,我们要注意函数接收参数时是以什么样的方式接收,有些方式可能会改变原值,而有些方式不会。

#include 
using namespace std;

//值拷贝 原来值不会改变
void demo1(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
    cout << "demo1 " << a << " " << b << endl;
}

//地址拷贝 原来值会改变
void demo2(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
    cout << "demo2 " << *a << " " << *b << endl;
}

//地址拷贝 原来值会改变
void demo3(int* c, int len)
{
    for (int i = 0; i < len; i++)
        c[i] = i;
}

int main()
{
    //基础数据类型
    int a = 10, b = 20;
    demo1(a, b);
    cout << a << " " << b << endl;	//10 20

    demo2(&a, &b);
    cout << a << " " << b << endl;	//20 10

    //连续空间
    int c[10];
    demo3(c, 10);
    for (int i = 0; i < 10; i++)
        cout << c[i] << " ";

    return 0;
}
指针地址拷贝

很多人平时经常犯的一个错误是将指针直接以参数形式传入函数,在函数改变其值后认为它的原值也会跟着改变,就如下面 demo3 所示,其实它并不会改变原值,必须要传入地址才能将原值改变。

#include 
using namespace std;

//值拷贝 原来值不会改变
void demo3(int* p) {
	*p = 100;
}

//地址拷贝 原来值会改变
void demo4(int** p) {
	**p = 100;
}

int main() {
	int* a1;
	*a1 = 10;

	demo3(a1);
	printf("%dn", *a1);	//10

	demo4(&a1);
	printf("%d", *a1);	//100

	return 0;
}

注意:

我们平时设计函数时,为了能够让别人能够一眼看出函数传入的参数的作用是什么,我们可以遵循以下规则。

char buf[1024];

//用const来表示该参数传入的值是只读不可写的
void copy(char*, const char*);

copy(buf, "heelo world");
转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号