浅拷贝&&深拷贝

// 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;


}

上一篇:CDocument类的UpdateAllViews()成员函数


下一篇:堆排序