浅拷贝&&深拷贝
作者:互联网
// 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;
}
标签:myArry,PArry,char,&&,printf,拷贝,size,指针 来源: https://www.cnblogs.com/wang-xiao-shuai/p/15250964.html