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

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

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 其他函数操作

总结

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

(0)

相关推荐

  • 详解C++中的const关键字及与C语言中const的区别

    const对象默认为文件的局部变量,与其他变量不同,除非特别说明,在全局作用域的const变量时定义该对象的文件局部变量.此变量只存在于那个文件中中,不能别其他文件访问.要是const变量能在其他文件中访问,必须显示的指定extern(c中也是)   当你只在定义该const常量的文件中使用该常量时,c++不给你的const常量分配空间--这也是c++的一种优化措施,没有必要浪费内存空间来存储一个常量,此时const int c = 0:相当于#define c 0:    当在当前文件之外使用

  • 深入浅析C语言与C++的区别与联系

    目录 一.C语言是面向过程语言,而C++是面向对象语言 1.面向过程和面向对象的区别 2.面向过程和面向对象的优缺点 面向过程语言 面向对象语言 二.具体语言上的区别 1.关键字的不同 2.后缀名不同 3.返回值 4.参数列表 5.缺省参数 半缺省参数 全缺省参数 6.函数重载 7.const 总结 8.引用 9.malloc,free && new,delete 10.作用域 C语言虽说经常和C++在一起被大家提起,但可千万不要以为它们是一种编程语言.我们来介绍C语言和C++中的区别和联

  • C++、C语言和JAVA开发的区别

    1.面向对象没有java彻底. 由于C++要兼容C的内容,而C是面向过程的,所以C++不可避免地出现过程影子,并不算是完全的面向对象的程序设计语言.例如总得要有main或winmain之类的过程吧. 2.C++的移植能力没有java好. 由于C++的事实标准的存在,即各个编译器总存在差异,所以或多或少存 在不兼容.而且各个软件平台的C++启动代码和硬件指令不同,编译后的C++程序一般是不能跨平台的.而java从娘胎里出来就是为了跨平台执行的,不采 用二进制机器码作为最终代码,所以在移植方面较好.

  • C语言中const和C++中的const 区别详解

    C语言中const和C++中的const 区别详解 C++的const和C语言的#define都可以用来定义常量,二者是有区别的,const是有数据类型的常量,而宏常量没有,编译器可以对前者进行静态类型安全检查,对后者仅是字符替换,没有类型安全检查. 而C语言中的const与C++也有很大的不同,在C语言中用const修饰的变量仍是一个变量,表示这个变量是只读的,不可显示地更改,而在C++中用const修饰过后,就变成常量了.例如下面的代码: const int n=10; int a[n];

  • 面试常见问题之C语言与C++的区别问题

    目录 C和C++的区别 关键字static在C和C++区别 1. 定义局部静态变量 2.限定访问区域 答案 结构体在C语言和C++的区别 C中malloc和C++的new区别 C++引用和C的指针有何区别 1.作为函数的参数 2.引用作为函数的返回值 C和C++的区别 C语言是一种结构化语言,其偏重于数据结构和算法,属于过程性语言 C++是面向对象的编程语言,其偏重于构造对象模型,并让这个模型能够契合与之对应的问题.其本质区别是解决问题的思想方法不同 虽然在语法上C++完全兼容C语言,但是两者还

  • C语言和C++的6点区别

    C语言和C++的区别 (1)面向过程语言和面向对象语言 C语言是面向过程语言,即先分析出解决问题的步骤然后再将这些步骤一一实现 C++是面向对象语言,即把问题分成若干个对象,目的是为了描述某个事物在解决整个问题的步骤中的行为 (2)关键字不同 C语言中有32个关键字,而C++有63个关键字.另外在C语言中struct关键字定义的变量不能有函数,而在C++中可以有函数 (3)文件后缀名不同 C语言中源文件的后缀名是.c,C++源文件后缀名是.cpp (4)函数返回值不同 C语言中如果一个函数没有指

  • c语言和c++语言中const修饰的变量区别浅析

    目录 c: 修饰全局变量: 修饰局部变量: c++: 修饰全局变量: 修饰局部变量: 总结: 在c语言中: 在c++语言中: 总结 c: 修饰全局变量: 用const修饰的全局变量是没有办法直接修改的,间接的修改也是不成功的(语法可以通过,但是编译运行的时候会报错.)(const只要是修饰全局变量,那么就会储存到常量区中,收到常量区的保护.) 修饰局部变量: 但是如果用const修饰局部变量,同样的也是没有办法直接修改的,但是是可以间接修改的. int main() { const int b

  • Java程序与C语言的区别浅析

    Java和C语言虽有相同性,但两者也有一定的不同.Java程序是面向对象的一种简单.分布式 .解释.健壮.安全.结构中立.可移植.高效能.多线程.动态的语言它是面向对象而C语言是面向过程的,这是最大的不同,对于学过C语言的我们来说,Java可以说是比较简单的编程语言. 在Java语言中,所有的变量必须要首先声明,然后才能使用. Java中可以有若干类但有且只有一个public,一个类中至少含有一个main方法,否则程序不能运行.而一个C语言由若干函数构成,其中必须且只有一个main的主函数,程序

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

    目录 1.结构体区别 1.1.类型上不再需要struct关键字,直接用结构体名即可 1.2.C++结构体中允许函数存在 2.动态内存申请 C语言的动态内存申请 C++的动态申请 3.内存池 4.string类型 总结 1. 结构体区别 1.1. 类型上不再需要struct关键字,直接用结构体名即可 #include <iostream> #include<string> using namespace std; struct MM { char name[20]; int age;

  • Python和Go语言的区别总结

    什么是Python? Python是一种功能强大的高级编程语言,主要用于科学和工程计算.它是一种高效的语言,优雅务实,简单而强大,适合新手和专业人士的编程. Python支持多种编程范例,并提出了一个大型标准库,包括面向对象,命令式,功能性和程序性. Go是什么? Go是一种通用编程语言,由Google设计:它借鉴了许多其他许多好主意语言,同时避免导致复杂性和不可靠代码的功能. Go支持多范式,如程序,功能和并发.它的语法传统上来自C语言,但它已经做了很多修改,以改进简单性和安全性等功能. Py

  • 实例说明js脚本语言和php脚本语言的区别

    js脚本语言和php脚本语言的区别是什么? 一句话: js是客户端脚本, 由浏览器执行. php是服务端脚本, 由php服务执行, php脚本跟shell脚本(bash执行)颇为类似. 来看看js脚本, 写一个test.html文件, 其中内容为: <script> alert("this is js"); </script> 直接双击本地的test.html文件, 结果就有一个弹框了, 因为浏览器执行了上述js脚本. 再看看看php脚本, 写一个test.ph

  • 从go语言中找&和*区别详解

    *和&的区别 :& 是取地址符号 , 即取得某个变量的地址 , 如 ; &a*是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 . 从代码中验证 : 先构建一个Rect类型 : 1. &是取地址符号, 取到Rect类型对象的地址 2. *可以表示一个变量是指针类型(r是一个指针变量): 3.*也可以表示指针类型变量所指向的存储单元 ,也就是这个地址所指向的值 4.查看这个指针变量的地址 , 基本数据类型直

  • c语言for、while和do-while循环之间的区别

    for,while,do-while区别 循环结构 1.初始化变量:for循环当中定义的初始化变量,只有自己才能用:while和do-while循环,初始化变量本来就在外面,所以外面也照样可以使用.2.执行次数:for循环和while循环是(先判断后执行),但是do-while循环是(先执行后判断).3.使用的普遍性不同:绝大多数情况下,三种循环可以来回转换.但是凡是次数确定.范围确定的情况,使用for循环. 详细例子如下:编程计算1+2+3+……+100a.用for循环 #include <s

  • javascript实现C语言经典程序题

    最近在学习Javascript语言,看到网上很多都是在介绍Javascript如何解决网页上问题的代码,所以想另辟蹊径,用Javascript代码来实现C语言经典程序题.当然,这些C语言程序题也是比较简单,主要想通过Javascript语言实现,起到语法练习作用,也想来对比一下C语言和Javascript语言实现的相同点和不同点,从而巩固记忆,加强学习效果!!! 一.C语言经典程序题1 1. 题目描述: 马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人,女人,小孩.他们在一家饭馆中吃

  • PHP、JAVA、.NET这三种技术的区别分析

    其实这三种编程技术各有优势,我们大概可以从语言.平台这二点来区分: 一.语言: PHP:PHP产生与1994年,其语法混合了C.Java.Perl 和他自创的一些编程语法:PHP是嵌入在HTML中执行的:它也是一种解释性语言.早期的PHP并非完全的面向对象编程语言,到了PHP4以后的版本才开始有了面向对象的概念. JAVA:JAVA产生与1995年,JAVA语言和JAVA平台统称为JAVA:它语法与C语言和C++语言很接近,并且JAVA是面向对象编程语言,JAVA是编译性语言,可以先将JAVA源

  • 从C语言过渡到C++之基本变化

    说到C++和C语言的区别,大部分人都会想到面向对象和面向过程.然而这种说法并不准确.面向对象和面向过程指的是两种不同的程序设计思想,而C++与C是两种编程语言,难道C++就不能用于面向过程去解决问题吗,当然可以.而面向对象的设计思想也可以用到C语言中去,我之前的文章就涉及过这方面的知识. 我们这个系列就是要抛开编程思想,单纯地从语法的角度介绍一下C++中究竟加入了哪些C语言中没有的功能.希望大家在掌握了C语言之后再来学习这部分内容. 首先,让我们看一段标准的C++代码: // main.cpp

  • R语言 vs Python对比:数据分析哪家强?

    什么是R语言? R语言,一种自由软件编程语言与操作环境,主要用于统计分析.绘图.数据挖掘.R本来是由来自新西兰奥克兰大学的罗斯·伊哈卡和罗伯特·杰特曼开发(也因此称为R),现在由"R开发核心团队"负责开发.R基于S语言的一个GNU计划项目,所以也可以当作S语言的一种实现,通常用S语言编写的代码都可以不作修改的在R环境下运行.R的语法是来自Scheme. R的源代码可自由下载使用,亦有已编译的可执行文件版本可以下载,可在多种平台下运行,包括UNIX(也包括FreeBSD和Linux).W

随机推荐