//C语言中的深拷贝和浅拷贝
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h> typedef struct _student{
char name[];
char *title;
int age;
}Student; void main(){
Student s1;
Student s2;
s1.age = ;
strcpy(s1.name, "小明");
s1.title = (char *)malloc(sizeof(char)* );
strcpy(s1.title, "总经理");
s2 = s1;
printf("s1的age=%d,s1的name=%s,s1的title=%s\n", s1.age, s1.name, s1.title);
printf("s2的age=%d,s2的name=%s,s2的title=%s\n", s2.age, s2.name, s2.title);
printf("s1的地址%x\n", s1.title); //打印b71408
printf("s2的地址%x\n", s2.title); //打印b71408
printf("s1的地址%x\n", s1.name); //打印d5fd18
printf("s2的地址%x\n", s2.name); //打印d5fce8
//这说明s1和s2中成员char *title;只是浅拷贝,两个指针指向同一块堆内存,
//当释放free(s1.title);时,s2.title指向的内存空间也没释放了,所以再次释放会报错
if (s1.title != NULL)
{
free(s1.title);
}
//错误代码
/*if (s2.title != NULL)
{
free(s2.title);
}*/ //要想实现深拷贝,那么必须给s2.title也分配一段内存空间,
//然后通过strcpy()将s2.title指向的字符串复制到s2.title指向的内存空间内 //由此证明,结构体之间的赋值(s2 = s1;),是进行了结构体内部所有数据的拷贝,
//如上s1.name的地址s2.name的地址不同,说明是把s1.name中的数据复制到了s2.name中
system("pause");
}

C语言中的深拷贝和浅拷贝的更多相关文章

  1. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

  2. 浅谈Java中的深拷贝和浅拷贝

    转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...

  3. 内功心法 -- Java中的深拷贝和浅拷贝

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------这篇博客主要来谈谈" ...

  4. **Python中的深拷贝和浅拷贝详解

    Python中的深拷贝和浅拷贝详解   这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容.   要说清楚Python中的深浅拷贝,需要 ...

  5. javascript中的深拷贝与浅拷贝

    javascript中的深拷贝与浅拷贝 基础概念 在了解深拷贝与浅拷贝的时候需要先了解一些基础知识 核心知识点之 堆与栈 栈(stack)为自动分配的内存空间,它由系统自动释放: 堆(heap)则是动 ...

  6. JavaScript中的深拷贝和浅拷贝!【有错误】还未修改!请逛其他园子!

    JavaScript中的深拷贝和浅拷贝! 浅拷贝 1.浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用.{也就是拷贝的是地址!简而言之就是在新的对象中修改深层次的值也会影响原来的对象!} // 2.深 ...

  7. 001 说说Python中的深拷贝和浅拷贝

    在Python编程中忽略深拷贝和浅拷贝可能会造成未知的风险. 比如我们打算保存一份原始对象的副本作为上一状态的记录,此后修改原始对象数据时,若是副本对象的数据也发生改变,那么这就是一个严重的错误. 注 ...

  8. C++中的深拷贝和浅拷贝构造函数

    1,对象的构造在实际工程开发当中是相当重要的,C++ 中使用类就要创建对象,这 就涉及了对象的构造,本节课讲解对象的构造和内存操作方面的问题: 2,实际工程开发中,bug 产生的根源,必然的会有内存操 ...

  9. Objective-C中的深拷贝和浅拷贝

    在Objective-C中对象之间的拷贝分为浅拷贝和深拷贝.说白了,对非容器类的浅拷贝就是拷贝对象的地址,对象里面存的内容仍然是一份,没有新的内存被分配.对非容器类的深拷贝就是重写分配一块内存,然后把 ...

随机推荐

  1. 基础学习day12--多线程一线程之间的通信和常用方法

    一.线程之间的通信 1.1.线程之间的通信方法 多个线程在处理统一资源,但是任务却不同,这时候就需要线程间通信.    等待/唤醒机制涉及的方法:    1. wait():让线程处于冻结状态,被wa ...

  2. git 查看远程分支、本地分支、删除本地分支

    1 查看远程分支 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ git branch -a   * br-2.1.2.2   master   remotes/origi ...

  3. java ee 面试时的机试题

    写一个简单的用户登录  servlet+jsp+原生ajax+json实现方式:  http://pan.baidu.com/s/1jGDY5h0

  4. Effective Java 53 Prefer interfaces to reflection

    Disadvantage of reflection You lose all the benefits of compile-time type checking, including except ...

  5. linux netstat 命令简解

    Netstat 简介: Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告.常见参数-a (all)显示所有选项,默认不显示LISTEN相 ...

  6. windows内核编程之常用数据结构

    1.返回状态 绝大部分的内核api返回值都是一个返回状态,也就是一个错误代码.这个类型为NTSTATUS.我们自己写的函数也大部分这样做. NTSTATUS MyFunction() { NTSTAT ...

  7. LESSON THREE

    安装redis,并使用ruby进行简单测试.             使用redis客户端ruby测试 安装gem yum install rubygems  安装ruby所需的redis-rb程序库 ...

  8. 2016开发一个app需要多少钱?app开发需要哪些成本-app开发问题汇总-广州达到信息

    作为一个APP开发从业者,被外行的朋友们问及最多的问题是,"做一个网站需要多少钱?"或者"开发一个APP需要多少钱?".作为开发过完整网站项目和手机APP的人, ...

  9. Uva10082 WERTYU -S.B.S.

    A common typing error is to place the hands on the keyboard one row to the right of the correct posi ...

  10. SQLConnect_ref.cpp

    // SQLConnect_ref.cpp // compile with: odbc32.lib #include <windows.h> #include <sqlext.h&g ...