C++与C的区别(二)

结构体区别

        C++中的结构体不再需要struct关键字,直接用结构体名即可,并在结构体中允许有函数存在。

#include<iostream>
using namespace std;

struct MM
{    
    //结构体中的数据称之为:属性或特征,通俗称之为:数据成员
    char name[20];
    int age;

    //结构体中的函数称之为:行为或方法,通俗称之为:成员函数
    void print()
    {
        cout << name << '\t' << age << endl;
    }

};

int main()
{
    struct MM girl = {"张三",20};    
    MM mm;            //不需要struct关键字
    gril.print();     //调用结构体里的函数   
    
    return 0;
}

        //C++在没有写构造函数权限限定的时候,和C语言的用法是一样的



动态内存申请

        C++的动态内存申请 : new(申请) 和 delete(释放)

单词内存的申请:

#include<iostream>

using namespace std;

int main()
{
    //单个内存申请
    //申请不做初始化
    int *pInt = new int;
    *pInt = 123;
    cout << *pInt << endl;

    //申请做初始化 用()给单个数据赋值
    char *pChar = new char('A');
    cout << *pChar << endl;
    
    //释放
    delete pInt;
    pInt = nullptr;

    delete pChar;
    pChar = nullptr; 

    //再次使用pInt
    *pInt = new int (321);
    cout << *pInt << endl;
    //再次释放
    delete pInt;
    pInt = nullptr;

    return 0;
}


数组内存申请:

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    //一位数组
    //1.不带初始化申请
    int *pInt = new int[3];    //等效产生了 int pInt[3]
    char* pstr = new char[15];
    strcpy_s(pstr,15,"ILoveYou");
    cout << pstr << endl;

    //带初始化的 一堆数据用{}
    int *pNum = new int[3]{1,2,3};
    for(int i = 0;i < 3; i++)
    {
        cout << pNum[i] << '\t';
    }
    cout << endl;

    //释放    
    //释放只有两种形式 delete 指针;delete [] 指针
    delete [] pInt;    //数组的释放 不需要大小
    pInt = nullptr;
    delete [] pstr;
    pstr = nullptr;

    delete [] pNum;
    pNum = nullptr;
}


结构体内存申请:

#include<iostream>
#include<cstring>
struct MM
{
    char* name;
    int age;
    void print()
    {
        cout << name << '\t' << age << endl;
    }
}

int main()
{    
    //new 一个对象
    //结构体只能用大括号    但不建议使用
    //MM* pMM = new MM{};
    MM* pMM = new MM;
    //结构体中指针,要二次申请,才能strcpy,或者赋值
    pMM->name = new char[20];
    strcpy_s(pMM->name,20,"莉丝");
    pMM->age = 18;
    pMM->print();
    
    //申请顺序和释放顺序是相反的
    delete []pMM-name;
    delete pMM;
    
    return 0;
}


内存池

内存池允许我们申请一段内存,共给程序使用,综合管理内存

#include<iostream>
using namespace std;
//允许大家申请一段内存,共给程序使用,综合管理内存
//malloc 内存是在堆区
//new 内存是自由存储区
int main()
{
    char* memorySum = new char[1024];
    // ......事情的处理需要内存,所有内存源自于memorySum
    int* pNum = new(memorySum) int[3]{1,2,3};
    for(int i = 0; i <3; i++)
    {
        cout << pNum[i] << '\t';
    }

    //char* pstr = new(pNum + 3) char[20]{"ILoveYou"};
    char* pstr = new(memorySum + 12) char[20]{"ILoveYou"};
    for(int i = 0; i< 20;i++)
    {
        cout << ((int *)memorySum[i]) << endl;
    }
    
    //释放
    delete [] memorySum;
    memorySum = nullptr;


    return 0;
}



string类型

string创建:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    //不带初始化
    //一般用string 不会用 const修饰
    string str;
    str = "hello"
    cout << str << endl;

    //带初始化
    //用赋值号 = 赋值
    strint str1 = "ILoveYou";
    cout << str1 << endl;
    //用小括号 () 赋值
    string str2("IMissYou);
    cout << str2 << endl;

    //用另一个字符串创建
    string str3 = str2;
    cout << str3 << endl;

    string str4(str3);
    cout << str4 << endl;

    //string一般没有长度
    string str5 = “19246187687126487216487326487648238572398752981”;


    return 0;
}


string类型的基本操作:        

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string str1 = "one";
    string str2 = "two";

    string str3 = str2;
    cout << str3 << endl;
    
    //两个字符串的拼接
    //没有减肥只有 +
    string srt4  = str1 + str2;
    cout << str4 << endl;

    //字符串的比较
    //比较依旧安装char* 去比较
    if(str1 > str2)     
    {
        cout << "str1 大!" << endl;
    }
    else
    {
        cout << "str2 大!" << endl;
    }

    return 0;
}

C++的string  和 C语言中的string

        C++中的string时一个自定义类型;不能用到C语言的字符串处理函数。

        C++中的string需要用到c_str() 和 data() 转换为C语言的char*

        C++中string的结尾没有记录\0

#include<iostream>
#include<string>
#include<cstring>
#include<stdio.h>
using namespace std;
int main()
{
    string str1 = "ILoveYou";
    //printf("%s\n",str);   无法输出
    printf("%s\n",str1.c_str());
    printf("%s\n",str1.data());

    //直接把数字转换为相应的字符串
    string str2 = to_string(12345);
    cout << str2 << endl;

    return 0;
}

       


其他函数操作:

emepty()        判断是否为空函数

size()              测试长度 函数

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string mystring = "IMissYou";
    cout << "mystring长度为: " <<mystring.size() << endl;

    string strEmpty;    
    if(strEmpty.empty())    //return length == 0;
    {
        cout << "strEmpty为空 " << endl;
    }

    return 0;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值