指针赋值(深拷贝 浅拷贝)
当我申请了一个char型指针,想给另一个指针用等于号赋值时,这两个指针将指向同一块内存,如果我把第一个指针释放,那么另一个指针指向的数据也没有了。
for (int i = 0; i < 3; i++) {Node *n = new Node(i+'0',i);char *c = (char*)malloc(sizeof(Node));memcpy(c,n,sizeof(Node));array[i] = c;//array[i] = (char*)malloc(sizeof(Node));//memcpy(array[i], c, sizeof(Node));Node *temp = (Node*)((char*)array[i]);//std::cout << temp->x << " " << temp->y << std::endl;//std::cout<<n->x<<" "<<n->y<<std::endl;length++;free(c);}
?-572662307
?-572662307
?-572662307
Hello World!
所以我们可以对另一个指针重新申请内存,然后用memcpy拷贝,那么第一个指针被释放,也完全没有影响。
array[i] = (char*)malloc(sizeof(Node));
memcpy(array[i], c, sizeof(Node));
0 0
1 1
2 2
Hello World!
// 指针数组.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "pch.h"
#include <iostream>
#include <cstring>
const int max = 100;
typedef struct Node
{char x;int y;Node(int a, int b) :x(a),y(b){}
}Node;void fun(char **array,int length)
{for (int i = 0; i < 3; i++){Node *n = new Node(i + '0', i);char *c = (char*)malloc(sizeof(Node));memcpy(c, n, sizeof(Node));array[i] = c;Node *temp = (Node*)((char*)array[i]);//std::cout << temp->x << " " << temp->y << std::endl;//std::cout<<n->x<<" "<<n->y<<std::endl;length++;//free(c);}
}int main()
{char **array;int length = 0;array = new char*[max];for (int i = 0; i < 3; i++) {Node *n = new Node(i+'0',i);char *c = (char*)malloc(sizeof(Node));memcpy(c,n,sizeof(Node));array[i] = (char*)malloc(sizeof(Node));memcpy(array[i], c, sizeof(Node));Node *temp = (Node*)((char*)array[i]);//std::cout << temp->x << " " << temp->y << std::endl;//std::cout<<n->x<<" "<<n->y<<std::endl;length++;free(c);}//fun(array,length);for (int i = 0; i < length; i++) {Node *temp = (Node*)((char*)array[i]);std::cout << temp->x << " " << temp->y << std::endl;}std::cout << "Hello World!\n";
}// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单// 入门提示:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
指针赋值(深拷贝 浅拷贝)相关推荐
- js 浅拷贝直接赋值_JS中的赋值、浅拷贝与深拷贝
作者:奚杰 拷贝是写代码中经常使用的方法.浅拷贝与深拷贝是指拷贝的两种情况.本文将深入探究JS的赋值.浅拷贝与深拷贝. 数据类型 在探究深拷贝与浅拷贝之前,我们先梳理一下JS的数据类型.在JavaSc ...
- python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别
在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...
- 赋值、浅拷贝与深拷贝
一.数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和引用数据类型. 基本数据类型:基本数据类型存储在栈内存中 引用数据 ...
- python类对象赋值_Python对象赋值、浅拷贝、深拷贝
Python中,基本数据类型,理解为常见数据类型:布尔型.整型.浮点型.字符串.列表.元组.字典.集合,随语言不同而不同,但是根据在内存中存储方式的不同,区分开原子类型和容器类型. 对象赋值 对象的赋 ...
- python中赋值不正确的_python中关于赋值、浅拷贝与深拷贝的问题
Python中关于对象复制有三种类型的使用方式,赋值.浅拷贝与深拷贝.他们既有区别又有联系,刚好最近碰到这一类的问题,研究下. 一.赋值 在python中,对象的赋值就是简单的对象引用,这点和C++不 ...
- Python——赋值、浅拷贝、深拷贝
和很多语言一样,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式. 在学习过程中,一开始对浅拷贝理解很模糊.不过经过一系列的实验后,我发现对这三者的概念有了进一步的了 ...
- int** 赋值_Python的赋值、浅拷贝、深拷贝之间的区别
这里用三张图来说清Python的赋值.浅拷贝.深拷贝之间的区别. 补充说明: 1.首先要理解 不可变数据.可变数据类型: 2.对于其他语言(如JAVA)的浅拷贝.深拷贝逻辑相同: 3.下图所描述的数据 ...
- Python 中的对象赋值、浅拷贝和深拷贝
一.对象赋值 首先,创建了一个名为 will 的变量,这个变量指向一个 list 对象,从第一张图中可以看到所有对象的地址(每次运行,结果可能不同) 然后,通过 will 变量对 wilber 变量进 ...
- 详细解析赋值、浅拷贝和深拷贝的区别
详细解析赋值.浅拷贝和深拷贝的区别 一.赋值(Copy) 赋值是将某一数值或对象赋给某个变量的过程,分为下面 2 部分 基本数据类型:赋值,赋值之后两个变量互不影响 引用数据类型:赋址,两个变量具有相 ...
最新文章
- 判断手机是否弹出键盘,改变了手机页面高度,对应inputStatus的状态改变相关控件的大小和位置
- 乏善可陈的Neuralink
- kali linux下安装TOR
- Oracle查询转换之连接谓词推入
- Python API快餐教程(1) - 字符串查找API
- 带有示例的Python列表reverse()方法
- python htmltestrunner报告_为什么python+htmltestrunner生成的测试报告有问题?
- 360智能工程中心期待你的加入
- 常问 3: 谈谈MySQL共享锁与排他锁
- flex 布局下关于容器内成员 flex属性的理解
- python pow_Python pow()
- 问题七十:计算机图形中的采样(Sampling)
- 计算机关闭系统剪切板上的内容,如何在Win10中打开/关闭和清除剪贴板历史记录...
- 一个例子学会自相关互相关的计算
- hdmi 屏幕旋转 树莓派_树莓派7寸HDMI显示屏使用教程
- 1.定义一个基类 Base,有两个公有成员函数fn1( ),fn2 ( )。 私有派生出Derived类,如何通过Derived 类的对象调用基类的函数fnl() ?
- 如何解决苹果Mac电脑安装PS失败并出现错误代码131 182出现“错误代码107”解决办法
- 如何配置一台电脑。(一次解决电脑基础知识和如何选择合适电脑)
- (一)TileMap使用
- 重庆封闭式计算机学校有哪些,重庆市十佳高三学校排名榜