zoukankan      html  css  js  c++  java
  • 浅谈c语言和c++中struct的区别

      今天做二叉树的时候,发现利用结构体有点乱,不知道怎么回事,我之前知道c语言中声明一个结构体变量时需要通过 struct 结构体名 变量名,而在c++中,可以不要struct,由于可以利用typedef嘛,但是在c++中,不能在结构体后面声明结构体数组,见如下代码;

    typedef struct Node{
        Node *lchild;
        Node *rchild;
        int key;
    }Node,*Tree,T[110];
    

     在这个代码中,不能利用后面的T[10];如果去掉typedef后便可以使用了,很奇怪,所以百度了一下,发现了c和c++语言中的一些区别,

    以下是来自:http://www.cnblogs.com/stonehat/

    1. C++语言将struct当成类来处理的,所以C++的struct可以包含C++类的所有东西,例如构造函数,析构函数,友元等,C++的struct和C++类唯一不同就是

        struct成员默认的是public, C++默认private。而C语言struct不是类,不可以有函数,也不能使用类的特征例如public等关键字 ,也不可以有static关键字。

    2. C++ struct里面成员初始化的形式和类是相同的,不可以直接初始化,就是不可以定义成员的时候同时初始化。C语言 struct中间的某个类型(例如int)也不可以直接初始化。

       就是说下面int a = 0;在C++和C语言里面都是不能通过的。

       

    struct HE
    {
    int a = 0;
    }
    //C++和C编译是不能通过的。

    3.  初始化方式,C++ struct的初始化,C++不仅拥有C语言的初始化方式。如下:

    按 Ctrl+C 复制代码
    按 Ctrl+C 复制代码

    也可以使用类的初始化方式

    复制代码
    struct HE
    {
    int a;

    };
    int main(){
    HE d;
    d.a = 3;
    return 0;
    }
    复制代码



    4. 类型不同,下面代码:

    struct HE
    {
    int a;

    };

    在C里面实际上数据类型为 (struct HE),所以定义一个结构HE变量都要 带上struct. 

    struct HE a;   //C语言 变量方式

    而在C++里面实际上数据类型为HE(主要是因为结构体被当成类对待了),所以定义变量不需要 struct.

    HE a; //C++语言 变量

    5. typedef struct 在C++和C语言中都是一样的功能,定义别名。 但是要注意下面的代码的区别

    //代码一

    复制代码
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct HE
    {
    int a;

    } *PHE,DHE,EHE; //这是定义了一个struct HE*类型别名和两个普通别名,main函数只考虑指针型别名。
    int main(){
    PHE a = (PHE)malloc(sizeof(struct HE)); //这是C语言的写法
    //PHE a = new HE(); 这是C++语言的写法
    return 0;
    }
    复制代码
    复制代码
    //代码二
    #include <stdio.h>
    #include <stdlib.h>
    struct HE
    {
    int a;

    } *PHE,DHE,EHE; //这里定义了一个指针型变量和两个普通变量
    复制代码

    上面两个代码省略 struct的名字 HE都是可以的。

    总结:C++语言因为是和C语言兼容的,所以C语言的语法在C++编译器里不会出错,但是程序员最好知道什么是C语言,什么是C++语言。

  • 相关阅读:
    JSP三大指令是什么?
    jsp和servlet的区别、共同点、各自应用的范围
    1.说一说Servlet的生命周期?
    .查询姓“李”的老师的个数;
    jquery 主要内容有两大部分:
    jQuery的优势:
    JDBC的PreparedStatement是什么?
    execute,executeQuery,executeUpdate的区别是什么?
    String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
    数据维护不求人,一招搞定增删改
  • 原文地址:https://www.cnblogs.com/numen-fan/p/6491137.html
Copyright © 2011-2022 走看看