C 、C++区别和细节

typedef struct LNode{
    int value;
    struct LNode *next

}LNode,*LinkLIst;//此处可注释

通过typedef 我们可以知道:

Lnode 是struct LNode的别名

LinkList 是 struct LNode * 的别名

在不定义别名的时候,即注释掉那行。

struct test{int b;};

struct test a;  // 编译通过
test a; // C语言编译错误,C++编译通过。

C++中 test a 就是表示struct test a

编译C语言,扩展名一定要用c,不能用cpp。

char *p = new char[100];
p = "I love";
p[10] = ‘w‘;

这里有几个问题你知道吗?

两个问题:

char *p = new char[100];  // 申请了100个字节的内存,给p
p = "I love";   // 把只读内存"I love"的首地址给了p(原来的100字节怎么办?)
p[10] = ‘w‘;   // 修改只读内存,进程崩溃了

原来的100个字节的首地址,谁也找不到了,没法释放(你没调用delete),这个有个术语,叫“内存泄漏”

malloc的内存必须free

new的内存必须delete

否则就内存泄漏。

char *p = new char[100];
delete []p;
p = "I love";

这样有问题吗?

在C++98标准中,这种写法是完全正确的。

不过,在C++11标准中,这种写法不提倡。

C++11标准要求,字符串常量,最好要用const char ,不要用char

const char *p = “I love”;

C语言只有malloc,C++既有malloc,又有new,那么他们一样吗?

肯定不一样。

没用“类”(class)的情况下,malloc和new相近。

用了“类”,malloc和new就不一样了。

那么struct算类吗?

C++的struct是被当作class来编译的,所以C++没有结构体。C语言才有结构体。

#include <iostream>
#include <stdlib.h>

using namespace std;

class Test
{
public:
    Test()
    {
        cout << "Test 1" << endl;
    }
    ~Test()
    {
        cout << "Test 2" << endl;
    }
};

int main()
{
    Test *p;
    cout << "malloc" << endl;
    p = (Test *)malloc(sizeof(Test));
    free(p);
    cout << "free" << endl;

    cout << endl;

    cout << "new" << endl;
    p = new Test;
    delete p;
    cout << "delete" << endl;
    system("pause");
    return 0;
}

运行这段代码,就能明显看出区别了。

C++的“类”(class)里面有两个特殊的成员函数,分别叫做“构造函数”和“析构函数”。

malloc:申请内存,结束。

new:申请内存,调用构造函数,结束。

free:释放内存,结束。

delete:调用析构函数,释放内存,结束。

比较这两段代码

http://codepad.org/E7aQYT9G

http://codepad.org/vheGfj0u

代表区别就是delete p和delete []p;

按C++标准的规定,这是未定义行为。

new对应delete

new[]对应delete[]

malloc对应free

时间: 2024-10-22 22:20:25

C 、C++区别和细节的相关文章

PHP运算符===和==的区别 小细节

区别: ===是恒等计算符   同时检查表达式的值与类型 ==是比较运算符号  不会检查条件式的表达式的类型 举例 if (strstr($new_url,'http://') === false) {}// NULL,FALSE,array(),"",0,"0"这几个值如果用==他们是相等的, 判断出某个值真正的返回值呢,就可以用 ===$a = 0;(数值)$b = FALSE;(布尔)$a === FALSE (类型不一样)不成立 $b === FALSE(类

APP弱网络条件下,体验优化之道

APP弱网络条件下,体验优化之道 最近跟朋友聊天刚好聊到这一块,他们是在做电商业务,商品图片及其多,API接口请求频率也高.然而,他们在移动2/3G的网络环境下,APP经常会出现Loading很久的情况,这里我把我们所分析与使用到的网络优化方案与大家分享一下. 所谓的弱网络,也就是指在网络不好的条件下进行使用APP,如2G.3G网络,这类网络条件下,用户的网络速度基本维持在10K/S~60K/S.如此差的网络环境, 如果还希望给用户提供良好的用户体验,那么我们的APP就该想想如何优化了. 转载表

服务器远程监控管理(二)-系统远程安装部署

上一章说过,通过DELL的远程管理卡(IDRAC卡),可以完成重起进入BIOS等所有进系统前的操作,这是windows的远程桌面做不到的,因此你原来在机房里的所有本地操作,在远程都可以完成,比如:远程光盘引导安装操作系统. 远程管理卡支持将网络上的操作系统ISO文件映射成本地虚拟光盘,因此,即使你的服务器没有光驱或光驱里没有光盘,仍然可以通过ISO文件映射成虚拟光驱安装操作系统. 1.进入远程管理卡界面(详见上一章内容),点击启动. 2.在下面弹出窗口中,点击"连接虚拟介质" 3.完成

AutoLayout深入浅出五[UITableView动态高度]

本文转载至 http://grayluo.github.io//WeiFocusIo/autolayout/2015/02/01/autolayout5/ 我们经常会遇到UITableViewCell的高度要跟随内容而调整,在未引入AutoLayout之前,我们使用以下方法计算Label高度,然后heightForRowAtIndexPath中返回计算的高度,这种做法,真的很土很局限很不好,如果UILabel使用了CoreText或者UIKit进行了富文本不同字体的排版,它更是没办法,我还得分段

拥抱Android:编译python搭建移动的无线服务器平台

你想用废旧的Android手机作家庭服务器嘛? 其实并不难.以前,用Android SDK开发一个手机应用,安装下apk就可以host服务了,而现在就直接native化吧. 这篇文章会带你体验编译Python的过程,并用Python搭建可以带着跑的服务器. 首先,我们要开始在Arm的Android平台上编译Python.当然,你需要先准备好一台Linux的机器,然后从Android的官方网站下载并安装好Android NDK(最好SDK也装了). 下载一些必要的代码包: openssl-1.0.

一种在Java中跨ClassLoader的方法调用的实现

ClassNotFoundException或者NoClassDefFoundError 在程序运行时我们可能遇到"ClassNotFoundException"或者"NoClassDefFoundError",遇到这样的问题时,当然,我们首先要检查我们的classpath的配置是否正确,需要的class是否已经按预期打包到运行时环境.但除了这些,我们还会遇到class已经被另外ClassLoader加载的情况,而且当前的ClassLoader层次被应用服务器控制,

用户体验设计的五个着手点

当互联网产业来到下半场,人口红利逐渐减少作用的时候,相信用户体验一定是产品设计的重点内容之一了.良好的用户体验不仅仅可以保证用户的数量,同时也能够保证优秀的用户粘度.那么,什么是用户体验呢? 用户体验,(英语:User Experience,简称UX),是涉及到一个人使用一个特定产品或系统或服务的有关行为.态度.与情绪.用户体验,包括实际.体验.情感.有意义.有价值的人机交流.和产品所有权方面的问题.此外,它包括系统方面,例如实用.易用性.和效率.用户体验的一个人的感知可以被认为一种主观性的程度

合并_01php基础语法(8days)笔记

一.入门指引 1.php是什么? PHP是什么? Hypertext Preprocessor,超文本预处理器 Personal Home Page,个人主页 是一种在服务器端执行的脚本语言,可嵌入到 HTML中,尤其适合 web 开发. ? php可以做什么? 网站,web程序 B/S架构 ? ? 命令行脚本 桌面应用程序 ? ? 二.安装Apache 制作一台服务器,来提高网页服务,只要安装了一个能提供网页服务的软件的电脑,就可以称之为网页服务器. 常见的网页服务器软件 Apache IIS

iOS中的单元测试(一)

转载自http://www.infoq.com/cn/articles/ios-unit-test-1 导读:本文不讨论单元测试是什么,或者它之于一个工程的利弊,我认为单元测试是一个开发者保证产出代码质量的有效工具.本文从使用者的角度对比当下比较流行的两款单元测试框架,给大家提供一些选用建议.如果你还不甚了解单元测试在工程中所起到的作用,或者还不知道TDD的开发模式,可参考:Test-Driven Development和Unit Testing. 本文对比两个iOS开发中常见的单元测试框架:O