浅拷贝&&深拷贝

// Project15.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#pragma warning (disable:4996)
#include<stdio.h>
#include<string.h>
#include<malloc.h>

//浅拷贝,多个指针只想一个内存,拿人家手短
//浅拷贝只是增加了一个指针指向已存在的内存地址,仅仅是指向被复制的内存地址,
//如果原地址发生改变,那么浅复制出来的对象也会相应的改变
int main01()
{

char myArry[10];//const char * 就是字符串

char *pArry[3];//指针数组

printf("输入字符串\n");

for (size_t i = 0; i < 3; i++)
{
scanf("%s", myArry);
pArry[i] = myArry;

}
printf("输入字符串为\n");
for (size_t i = 0; i < 3; i++)
{
printf("%s\n", pArry[i]);
}

return 0;
}


//深拷贝,深拷贝是增加了一个指针并且申请了一个新的内存
//使这个增加的指针指向这个新的内存
int main()
{
char myArry[10];
char *PArry[3];

printf("输入字符串\n");

for (size_t i = 0; i < 3; i++)
{
scanf("%s", myArry);
//分配内存,后面需要释放
PArry[i] = (char*)malloc((strlen(myArry)+1) * sizeof(char));//length
strcpy(PArry[i], myArry);
}

for (size_t i = 0; i < 3; i++)
{
printf("%s\n", PArry[i]);
}

for (size_t i = 0; i < 3; i++)
{
free(PArry[i]);//释放指针指向的数据
PArry[i] = NULL;// 释放指针本身

if (PArry != NULL)
{
printf("%p\n", PArry[i]);
}
}
return 0;


}

posted @   江南王小帅  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示