iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++与C语言的区别你知道吗
  • 823
分享到

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

2024-04-02 19:04:59 823人浏览 泡泡鱼
摘要

目录1.结构体区别1.1.类型上不再需要struct关键字,直接用结构体名即可1.2.c++结构体中允许函数存在2.动态内存申请C语言的动态内存申请C++的动态申请3.内存池4.st

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++结构体中允许函数存在

  • 在结构体中声明,在结构体外实现,当然可以直接在结构体中实现
  • 结构体中函数访问数据,是可以直接访问
  • 学会调用,和数据成员方式时一样的
    • 对象(结构体变量).成员
    • 对象指针->成员
    • (*对象指针).成员
  • C++在没有写构造函数和权限限定的时候,用法和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语言的动态内存申请

  • malloc 不带初始化 ,calloc 带初始化,realloc 重新申请
  • free 释放

C++的动态申请

  • new(申请)和delete(释放)
  • 单个变量内存申请
  • 数组的动态申请
  • 结构体内存申请

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

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

  • string创建

+ 带初始化

+ 不带初始化

+ 通过另一个字符串创建

  • string基本操作

+ 拷贝

+ 赋值

+ 连接

+ 比较

  • C++string与C语言string.h
  • string 其他函数操作

总结

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

--结束END--

本文标题: C++与C语言的区别你知道吗

本文链接: https://www.lsjlt.com/news/142145.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++与C语言的区别你知道吗
    目录1.结构体区别1.1.类型上不再需要struct关键字,直接用结构体名即可1.2.C++结构体中允许函数存在2.动态内存申请C语言的动态内存申请C++的动态申请3.内存池4.st...
    99+
    2022-11-13
  • C++引用和指针的区别你知道吗
    目录引用1.引用概念2.格式3.引用特性4.常引用1.const引用5.使用场景1、引用作为参数2. 引用作为做返回值6.引用和指针的区别7.引用和指针的不同点:总结引用 1.引用概...
    99+
    2022-11-12
  • C语言函数传递数组和传递地址的区别你知道吗
    目录传递数值传递地址注:总结传递数值 code: #include <stdio.h> void deliveryData(int data) { data = d...
    99+
    2022-11-12
  • 你知道C语言中#和##表示的意义吗
    目录1.#2.##3.总结如标题,这篇文章会讲解C语言中的#和##是啥意思。我相信,大部分朋友应该都没怎么用过,这两个玩意的使用条件相当苛刻。 #用于把一个宏参数直接转换为相应的字符...
    99+
    2023-05-14
    C语言# ##意义 C语言# ##区别 C语言# ##
  • C语言中const和指针的秘密你知道吗
    目录指针的赋值问题ANSIC有关简单赋值的标准问题解决char*和constchar*char**和constchar**const修饰const修饰变量const修饰指针const...
    99+
    2022-11-13
  • C++与C语言的区别是什么
    这篇“C++与C语言的区别是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++与C语言的区别是什么”文章吧。1. 结构...
    99+
    2023-06-29
  • 你真的知道onmouseenter与onmouseover的区别吗
    是的,onmouseenter与onmouseover是鼠标移入事件,它们的区别在于事件冒泡和触发频率。1. 事件冒泡:onmous...
    99+
    2023-09-21
    区别
  • C语言也有封装,继承和多态你知道吗
    目录封装继承多态函数的指针通过函数的指针实现多态总结我们知道封装、继承、多态是面向对象的三大特性,我们也知道C语言是面向过程的语言,那么可不可以在面向过程的语言中用面向对象的思想编程...
    99+
    2022-11-13
  • C语言字符函数中的isalnum()和iscntrl()你都知道吗
    isalnum() 函数用于检查所传的字符是否是字母或者十进制数字。它的函数原型如下: _CRTIMP int __cdecl isalnum(int _C); 返回...
    99+
    2022-11-13
  • C/C++的文件IO函数你知道吗
    目录一、C1.fopen函数参数 返回值2.fclose3.FILE结构体4.fprintf()和fscanf()函数二、C++三、示例程序总结文件(file)通常是在磁盘...
    99+
    2022-11-13
  • C语言中有哪些字符处理函数你知道吗
    目录1、字符串常用操作:连接、拷贝、比较与获取长度2、mem_类的函数(查找、比较、拷贝与赋值)3、寻找字符串子串4、字符串转数字5、数字转字符串 6、分隔符分割字符串7、...
    99+
    2022-11-13
  • 你知道C语言函数调用常用的2种方式吗
    目录区别原理用途总结本篇博客会讲解C语言函数调用的2种方式,分别是:传值调用和传址调用。这2种函数调用方式有什么区别呢?为什么会有不同的效果呢?分别有哪些用途呢?下面我会一一展开。 ...
    99+
    2023-05-18
    C语言函数调用方式 C语言函数调用 C语言函数
  • C语言怎么连接两个数组的内容你知道吗
    目录要求:源代码如下:运行效果图如下:总结要求: 定义两个数组,并用指针将两个数组的内容连接到一起 源代码如下: #include<stdio.h> void main(...
    99+
    2022-11-12
  • c语言与go语言的区别有哪些
    小编给大家分享一下c语言与go语言的区别有哪些,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!区别:1、C语言源文件的扩展名是“.h”和“.c”,Go语言源文件的扩展名是“.go”。2、C语言中通过文件来管理代码,Go语言中...
    99+
    2023-06-06
  • 深入浅析C语言与C++的区别与联系
    目录一、C语言是面向过程语言,而C++是面向对象语言1、面向过程和面向对象的区别2、面向过程和面向对象的优缺点面向过程语言面向对象语言二、具体语言上的区别1、关键字的不同2、后缀名不...
    99+
    2022-11-12
  • C语言常用的编辑器你知道几个
    目录VC++6.0Code::BlocksDev-C++VisualStudioC-FreeGCC总结VC++ 6.0 这款软件相信大家看到名字就觉得很亲切的,也是大家吐槽最多的。...
    99+
    2022-11-13
  • 你知道Web前端与HTML5技术的区别吗?
    Web前端与HTML5有什么区别?相信很多初学前端的人都会有这个困惑,在学习之初很多人都会把HTML5和前端的概念弄混淆了。例如,H5是HTML5的简称,而现在好多人把HTML5看成了是前端开发的总称。所以今天小编就为大家准备了这篇文章,让...
    99+
    2023-06-03
  • c语法与java语法有区别吗?
    C语言和java在语法上有区别,区别是:C语言可以直接操作内存,java不能直接操作;C语言可以封装动态库,java不行;C语言的代码不容易跨平台,java的代码容易跨平台;C语言有指针,java没有指针;C语言可以直接操作串口,java需...
    99+
    2018-10-16
    java基础 c java 语法
  • C语言中如何获取函数内成员的值你知道吗
    目录C语言中如何获取函数内成员的值通过函数返回值获取函数内部的情况通过变量降级(传地址)获取函数内部的情况总结C语言中如何获取函数内成员的值 引言:函数作为实现 C 程序功能模块的主...
    99+
    2022-11-13
  • C++语言与其他语言有什么区别
    本篇内容主要讲解“C++语言与其他语言有什么区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++语言与其他语言有什么区别”吧!本文着重进行对C++语言来说,在语法上要简单得多,因此初学者很容...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作