C++与C语言的区别是什么

发布时间:2022-03-11 11:40:32 作者:iii
来源:亿速云 阅读:114

这篇“C++与C语言的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++与C语言的区别是什么”文章吧。

1. 结构体区别

1.1. 类型上不再需要struct关键字,直接用结构体名即可

#include <iostream>
#include<string>
using namespace std;
struct MM
{
	char name[20];
	int age;
};
int main()
{
	struct MM girl;
	MM mm;//C++中不需要struct关键字
	return 0;
}

1.2. C++结构体中允许函数存在

#include <iostream>
#include<string>
using namespace std;
struct MM
{
	//属性
	//数据成员
	char name[20];
	int age;
	//行为(方法)
	//成员函数
	void print()
	{
		cout << name << "\t" << age << endl;
	}
	void printData();//在结构体中声明,在外面实现
	int& getAge()
	{
		return age;
	}
};
//结构体名限定,就是告诉别人这个函数来自哪里
void MM::printData()
{
	cout << name << "\t" << age << endl;
}
//结构体中的变量必须要通过结构体变量(结构体指针)访问
//c++结构体中的函数访问属性,可以直接访问
int main()
{
	struct MM girl = {"小芳",28};
	MM mm = {"小丽",24};//C++中不需要struct关键字
	girl.print();
	(&mm)->printData();
	MM* p = &mm;
	p->printData();
	p->getAge() = 84;
	p->printData();
	p->age = 1991;
	p->printData();
	return 0;
}

2. 动态内存申请

C语言的动态内存申请

C++的动态申请

例子:单个变量内存申请和数组的动态申请

#include<iostream>
#include<string>
using namespace std;
void testNoeMemory()
{
//申请不做初始化
	int* pInt = new int;
	*pInt = 123;
	cout << *pInt << endl;
	char* pChar = new char;
	*pChar = 'A';
	cout << *pChar << endl;
//申请内存做初始化  ()给单个数据做初始化
	int* pNum = new int(134);
	cout << *pNum << endl;
	delete pInt;
	pInt = nullptr;
	delete pChar;
	pChar = nullptr;
	delete pNum;
	pNum = nullptr;
}
void testArrayMerrmory()
{
	//一维数组
	//1、不带初始化
	//长度可以是h变量,只要值就可以
	int* pInt = new int[3];//等效产生了 int pInt[3]的数组
	char* pstr = new char[15];
	strcpy_s(pstr, 15, "I love you");
	cout << pstr << endl;
	//带初始化的 一堆数据用{}
	int* pNum = new int[3]{1, 2, 3};
	for (int i = 0; i < 3; i++)
	{
		cout << pNum[i] << " ";
	} 
	cout << endl;
	delete[] pNum;
	char* str = new char[20]{'A', 'B', '\0'};
	cout << str << endl;
	delete[] str;
	str = nullptr;
	str = new char[20]{"Ilove you"};
	cout << str << endl;
	delete[] str;
	str = nullptr;
	delete[] pInt;//数组的指针 不需要大小
	//释放只有两种形式 delete 指针 delete [] 指针
	//delete [][] p 没有这种写法
	pInt = nullptr;
}
int main()
{
	testNoeMemory();
	return 0;
}

例子:结构体内存申请

#include<iostream>
#include<string>
using namespace std;
void testNoeMemory()
{
//申请不做初始化
	int* pInt = new int;
	*pInt = 123;
	cout << *pInt << endl;
	char* pChar = new char;
	*pChar = 'A';
	cout << *pChar << endl;
//申请内存做初始化  ()给单个数据做初始化
	int* pNum = new int(134);
	cout << *pNum << endl;
	delete pInt;
	pInt = nullptr;
	delete pChar;
	pChar = nullptr;
	delete pNum;
	pNum = nullptr;
}
void testArrayMerrmory()
{
	//一维数组
	//1、不带初始化
	//长度可以是h变量,只要值就可以
	int* pInt = new int[3];//等效产生了 int pInt[3]的数组
	char* pstr = new char[15];
	strcpy_s(pstr, 15, "I love you");
	cout << pstr << endl;
	//带初始化的 一堆数据用{}
	int* pNum = new int[3]{1, 2, 3};
	for (int i = 0; i < 3; i++)
	{
		cout << pNum[i] << " ";
	} 
	cout << endl;
	delete[] pNum;
	char* str = new char[20]{'A', 'B', '\0'};
	cout << str << endl;
	delete[] str;
	str = nullptr;
	str = new char[20];
	cout << str << endl;
	delete[] str;
	str = nullptr;
	delete[] pInt;//数组的指针 不需要大小
	//释放只有两种形式 delete 指针 delete [] 指针
	//delete [][] p 没有这种写法
	pInt = nullptr;
}
struct MM
{
	char* name;
	int age;
	void printMM()
	{
		cout << name << "\t" << age << endl;
	}
};
void testStructMerrory()
{
	//new一个对象
	int* p = new int(123);
	//结构体只能用大括号
	MM* pMM = new MM;
	//结构体中指针,要做二次申请,才能strcpy,或者赋值
	pMM->name = new char[20];
	strcpy_s(pMM->name, 20, "李四");
	pMM->age = 188;
	pMM->printMM();
	//申请的顺序和释放的顺序是相反的
	delete[]pMM->name;
	delete pMM;
}
int main()
{
	//testNoeMemory();
	testStructMerrory();
	return 0;
}

3. 内存池

允许大家申请一段内存,共给程序使用,综合管理内存

4. string类型

只需要知道有这种用法即可,不需要大家深究为什么,因为string本身是一个类,需要讲完类的大部分知识,才能追究为什么这样做。自己也可以封装一个string 类型

+ 带初始化

+ 不带初始化

+ 通过另一个字符串创建

+ 拷贝

+ 赋值

+ 连接

+ 比较

以上就是关于“C++与C语言的区别是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. php与c语言的区别是什么
  2. Java与C语言和C++的区别是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ c语言

上一篇:C语言如何实现图书管理系统的文件数据库

下一篇:pytorch中with torch.no_grad()怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》