文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++与C语言的区别你知道吗

2024-04-02 19:55

关注

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 类型

+ 带初始化

+ 不带初始化

+ 通过另一个字符串创建

+ 拷贝

+ 赋值

+ 连接

+ 比较

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!      

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯