栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言与C++的区别(二)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言与C++的区别(二)

开篇醒脑
《金缕衣》
劝君莫惜金缕衣,劝君惜取少年时。
有花堪折直须折,莫待无花空折枝。

目录
  • 一、结构体的区别
  • 二、动态内存申请
  • 三、内存池
  • 四、string类型
  • 五、本章作业

一、结构体的区别
  • 结构体类型的声明不在需要struct关键字,直接用结构体名就行
//定义一个结构体Tihu
struct Tihu
{
	int age;
}
//在这里定义变量时不再需要struct
Tihu A1;
A1.age = 18;
  • 类似于命名空间,结构体当中允许函数的存在

    • 类比命名空间,结构体当中也是允许函数存在的,同时,他们的定义也是可以存在于结构体里面或者结构体外面的。
    • 结构体当中的函数访问数据是可以直接访问的
    • 可以通过外部函数修改数据
    • 结构体当中成员的调用与C语言当中结构体成员的调用方法是一致的
      • 结构体类型变量.成员
      • 结构体类型指针->成员
      • (*结构体类型指针).成员
    • 在没有写构造函数和权限限定的时候,用法和c语言的用法是一致的
struct Tihu
{
	int age;
	char name[20];
	char* name1;
	//声明写在里面,定义写到外面去
	void print();
	//函数的声明定义都写在里面
	void printTihu()
	{
		cout<<"printTihu"<print();
	//外部函数修改内部数据
	A3->getAge() = 20;
	//同时也可以定义结构体数组
	Tihu A4[3];
	return 0;
}

二、动态内存申请
  • c语言的几种动态内存申请

    • malloc 不带初始化的申请
      指针类型 指针变量名 = (指针类型)malloc(指针指向类型的长度*总的个数);

    • calloc 带初始化的申请

      指针类型 指针变量名 = (指针类型)calloc(指针指向类型的个数,指针指向类型的长度);

    • realloc 在已有的内存长度后面继续申请
      已有指针变量名 = (指针类型)realloc(已有指针变量名,原有内存长度加上想要再次申请内存长度的总和);

    • 内存释放
      free(指针变量名);

  • C++动态内存申请

    • new为申请

    • delete为释放
      delete 指针变量名(单个变量的释放)
      delete[] 指针变量名(数组的释放,不需要数量)

    • 单个变量的申请
      指针类型 指针变量名 = new 指针所指向的类型

    • 数组的动态申请
      指针类型 指针变量名 = new 指针所指向的类型[申请类型内存个数]

    • 结构体内存申请

Tihu* pT = new Tihu;
//结构体当中的指针需要进行二次申请
pT->name1 = new chae[20];
strcpy(pT->name1,"莫大帅");
pT->age = 30;
pT->print();
pT->getAge() = 32;
pT->printTihu();
//申请的内存都需要释放,并且释放顺序与申请顺序应该是相反的
delete[] pT->name1;
delete pT;
三、内存池
  • 申请一大块内存供本程序使用,在需要时在已申请的那一块内存里进行再次申请,程序结束时只需要释放最大块内存即可
//总的内存池是1024字节
char* memorySum = new char[1024];
//申请三个int类型的内存大小
//内存池内的申请方式为:
//指针类型 指针变量名 = new(申请内存开始的地方) 指针所指向的类型 [个数(一个可不写)]
int* pNum = new (memorySum) int[3];
//再次申请
char* pStr = new(pNum+3) char[10];
//释放
delete[] memorySum;
memorySum = nullptr;

四、string类型
  • string类型的创建
    • 不带初始化
      string str1;
    • 带初始化
      string str2 = "Tihu";
      string str2(Tihu)
    • 通过另一个字符串创建
      string str3 = str2;
      string str3 (str2);
  • string的基本操作
    • 拷贝
    • 赋值
    • 连接
      string str5 = str3+str2;
    • 比较
      str3==str2;
      这个比较就类似于C语言中的strcmp那个函数
  • C++string和C语言string.h
    这里的string是一个数据类型,直接操作的也是这个类型的自变量,而C语言里面的string.h是一个库函数,操作对象为char类型的变量,因此string类型不能使用C语言中string.h库中的函数进行操作.
  • string其他函数操作
    • 如果想要将string类型转化为char类型,可以使用string类中的c_str函数
      string str = "Tihu";
      str.c_str();//这时的str就是一个char类型变量名
    • 这里的string类型是没有长度限制的
五、本章作业

二维数组的动态内存申请,采用子函数的方式 为二级指针申请内存,和释放内存

#include 
using namespace std;
void createArray2D(int row,int cols,int** & p) {
	p = new int*[row];
	for(int i=0; i 

结果为:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/528796.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号