c++是c语言的增强版,但是和c语言之间有何区别呢?

c和c++的区别:

1.全局变量检测增强
int a;
int a=10;

2.函数检测增强,参数类型增强,返回值检测增强,函数调用参数检测增强(参数检测个数)
c中传入的参数与接收的参数可以不同,只是警告,c中你传多少个参数,只有几个接收参数都可以,但是在C++中不可以,有多少个采纳数就接收多少个参数

c中可以不加返回值,警告
但是在c++中都会报错显示出来

3.类型转换检测增强
char *p=(char*) malloc(sizeof(64));//malloc返回值是void*,强制转换(char*)

在c中返回void*,不用强转,在C++中需要强转

4.struct增强

void person(){
int age;
void pulsage(){
age++;
}}

注意:在c语言中struct是不可以加函数的
在C++中struct是可以加函数的

void test(){

struct person p1;//在使用的时候必须加上struct关键字,但是在c++中不加上struct也可以
p1.age=100;
p1.plusage();

}

例子:struct增强:

  1. struct Person
  2. {
  3. int age = ;//在这里是可以直接是申明age的,c是不可以这样的
  4. void plusage() {//在这里是直接可以写一个函数在里面,c是不可以的
  5. age++;//在这里是可以添加一个函数void进来
  6. }
  7. };
  8.  
  9. int main() {
  10. Person p1;//person结构体用p1来表示
  11. cout << "C++增强版本:" << p1.age << endl;
  12. p1.plusage();//调用结构体里面的函数之后age的值加1
  13. cout << "C++增强版本:" << p1.age << endl;
  14. }

运行结果:

5.bool类型增强,在c语言是没有bool类型,在C++语言中是由bool类型的,非0就是真,sizeof

  1. void test06(){
  2. bool flag;//默认是1,flag,只有真或者假
  3. cout << "bool类型" << sizeof(flag) << endl;//sizeof,数据类型所占的大小
  4. flag = ;//非0就是1
  5. cout << flag << endl;
  6.  
  7. }

运行结果:

6.三目运算符(c中返回的是值,在c++中返回的是变量)

  1. int a = ;
  2. int b = ;
  3. printf("ret=%d\n", a > b ? a : b);//在c语言和c++都可以
  4.  
  5. //a > b ? a : b//如果a>b的话,那么该值就是a
  6. //a >b ? a : b = 100;//在这里由于a小于b,所以结果就是b=100,重新被赋值了,在c语言中,这里面是20=100,是不可以这样的,在C++中返回的是变量
  7. (a < b ? a : b)=;//在c++中这个是返回的是变量,a=100.为什么加括号,当成立的时候,a<b成立时直接执行到a:b中的a就好了,不会执行后面的部分,所以不会被赋值
  8. cout << "a="<<a << " b=" << b << endl;//在这里的话就是打印出赋值之后的b的值出来
  9.  
  10. //如果c语言向模仿这个c++语言来编写的话,那么要加*,c语言
  11. *(a > b ? &a : &b)= ;//通过指针的形式来返回变量进行赋值

c语言中返回的是值,在C++返回的是变量,如果要使用c语言的三目运算符赋值的话,要使用指针*的,才可以对三目运算符进行赋值

7.const增强,c中不能修改,可以用指针的方式,但在C++中是可以修改的

  1. //const强制转化,在c中只能读,常量,不能修改的
  2. //在c语言中,会临时开辟一块内存空间,在c++,const不会分配内存,const int a=100;
  3. const int a = ;//如果放在全局里面,那么受到保护,不可以修改的,并不是真正的常量
  4. printf("a==%d\n", a);
  5.  
  6. //下面是c的指针方式,利用地址来分配临时的内存空间
  7. int *p = (int*)&a;//在c语言中用指针的方式来进行强制转换
  8. *p = ;
  9. printf("a的值=%d\n", *p);
  10. printf("原来的值%d\n", a);
  11. //int arr(a);//不可以初始化数组

运行结果:

const增强,使用extern增强作用域,找到这个值a,新建一个const.cpp文件,代码如下:

c默认是外部链接,c++默认是内部链接

  1. #include "pch.h"
  2. extern const int a = ;
  3. //加上extern,可以增加作用域,C++的const默认是内部链接

main方法代码如下:

  1. int main() {
  2.  
  3. extern const int a;//取外面找a,a是全局作用域
  4. printf("a的值是%d\n", a);
  5. }

const分配内存

/*
1.const分配内存,取地址会分配临时内存
2.extern编译器也会给const分配内存

3,普通常量重新初始化const变量也会被赋值

*/

  1. const int m_a = ;
  2. int *p = (int*)&m_a;//会分配临时内存
  3.  
  4. //普通变量初始化const变量也会分配内存
  5.  
  6. int f = ;
  7. const int b =f;//这个时候也会分配内部空间
  8.  
  9. printf("b的值%d\n", b);
  10. int *q = (int*)&b;
  11. *q = ;
  12. cout << "指针分配内存之后:" << *q << endl;

实例:

  1. #include <string>//引入string的时候,要加上这句
  1. //定义一个结构体呀
  2. struct Person1{
  3. int agg ;
  4. string p_name;
  5. };
  1. //string来分配内存空间
  2. //用指针来取值呀
  3. const Person1 p1;//将person结构体赋值给p1
  4. Person1 *s = (Person1*)&p1;//把这个变量的地址拿过来,强制转化成结构体
  5. (*s).agg = ;//*s是一个结构体变量,可以读这个结构体属性进行赋值
  6. s->p_name = "yunxin";//s指向的是指针,指针指向name进行赋值操作
  7. cout << "之后的age结果是:" << (*s).agg << "名字是:" << s->p_name << endl;

运行结果:

#define max=100;//宏常量不重视作用域,undef max 卸载
const int m = 100;//尽量用const替换上面的宏

C++入门篇二的更多相关文章

  1. 【SSRS】入门篇(二) -- 建立数据源

    原文:[SSRS]入门篇(二) -- 建立数据源 通过 [SSRS]入门篇(一) -- 创建SSRS项目 这篇,我们建立了一个SSRS项目: 接下来,我们以 AdventureWorks2012 示例 ...

  2. 学习笔记-CCS-MSP430F5529[快速入门篇二]

    由于2021的全国电赛延期了,从今天开始打算好好整理一下使用CCS编程的经验,本篇笔记会好好整理一下我备赛期间用CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输入捕获,PWM波输出,UAR ...

  3. 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证-2.2身份验证开发]

    2.2身份验证开发 在我们的案例中,我们是用户通过Web应用程序进行身份识别. 上面的图示说明了如下的一些概念 l Azure AD 是标识提供程序,负责对组织的目录中存在的用户和应用程序的标识进行验 ...

  4. 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证]

    二.使用Azure AD进行身份验证 之所以将Azure AD 作为开始,是应为基本上我们所有应用都需要进行安全管理.Azure Active Directory (Azure AD) 通过以下方式简 ...

  5. 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证--2.1使用Azure AD需要了解几个概念]

    2.1使用Azure AD需要了解几个概念 l Azure AD目录 当你注册 Microsoft 云服务时,便会获得一个 Azure AD 目录.你可根据需要创建更多的目录.例如,可以将第一个目录保 ...

  6. Android攻城狮学习笔记—入门篇二

    第七章  跑马灯 activity_main.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/an ...

  7. opengl入门篇二: 索引缓冲对象EBO

    在绘制图形的过程中,顶点可能会重复.比如两个三角形组成了四边形,那么,必然有两个点是重复的.因此采用索引的方式,四个点即可描述四边形. // 四个顶点 GLfloat vertices[] = { / ...

  8. 【SSRS】入门篇(三) -- 为报表定义数据集

    原文:[SSRS]入门篇(三) -- 为报表定义数据集 通过前两篇文件 [SSRS]入门篇(一) -- 创建SSRS项目 和 [SSRS]入门篇(二) -- 建立数据源 后, 我们建立了一个SSRS项 ...

  9. Linux入门篇(二)——文件

    这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...

随机推荐

  1. 开发工具IntelliJ IDEA的安装步骤及首次启动和创建项目

    开发工具IDEA概述 DEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写.所以,需要有JRE运行环境并配置好环境变量.它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公 ...

  2. python2.7.14安装部署(Linux)

    +++++++++++++++++++++++++++++++++++++++++++标题:python2.7.14安装部署(Linux)时间:2019年2月23日内容:Linux下python环境部 ...

  3. MySQL 字符串 分割 多列

    mysql如何进行以,分割的字符串的拆分 - 我有一个梦想 - CSDN博客https://blog.csdn.net/u012009613/article/details/52770567 mysq ...

  4. Timer类的常见使用方法

    System.Timers名称空间中的Timer类的构造函数只需要一个时间间隔,经过该时间间隔后应该调用的方法用Elapsed事件指定,这个事件需要一个ElapsedEventHandler类型的委托 ...

  5. ABP中模块初始化过程(二)

    在上一篇介绍在StartUp类中的ConfigureService()中的AddAbp方法后我们再来重点说一说在Configure()方法中的UserAbp()方法,还是和前面的一样我们来通过代码来进 ...

  6. Tensorflow--矩阵切片与连接

    博客转载自:https://blog.csdn.net/davincil/article/details/77893185 函数原型:slice(input_, begin, size, name=N ...

  7. Qt中实现将float类型转换为QString类型

    在使用Qt Creator编程时,难免会用到将float类型转换为QString类型的时候下面是我所有的方法: 1. 将QString类型转化为float类型,很简单 QString data; fl ...

  8. Docker 容器日志格式化

    Docker容器的日志文件每一行都是一个json对象,其包含log.stream.time三个属性,下面的HTML从textarea中读取输入的日志信息,格式化为表格显示. <!DOCTYPE ...

  9. 爬虫 requests 模块

    requests 模块 介绍 使用requests可以模拟浏览器的请求, 比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) ps: requests库发 ...

  10. Magento 2 Error: A technical problem with the server created an error. Try again to continue what you were doing. If the problem persists, try again later.

    有时在Magento上进行调试会很烦人,特别是如果出现了一些问题,而不是在你实际编写代码时. 这是Magento管理面板上发生的事情.截至目前,它可能是三个原因之一,让我们讨论一下: 1.管理员密码 ...