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增强:

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

运行结果:

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

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

运行结果:

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

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

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

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

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

运行结果:

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

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

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

main方法代码如下:

int  main() {

    extern  const int  a;//取外面找a,a是全局作用域
printf("a的值是%d\n", a);
}

const分配内存

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

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

*/

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

实例:

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

运行结果:

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

最新文章

  1. OpenERP ORM 对象方法列表
  2. java jdbc
  3. 用jsonp格式的数据进行ajax post请求变成get
  4. JAVA hashmap知识整理
  5. LeetCode OJ-- Word Ladder II ***@
  6. IBatis.Net系列-多参数的SQL语句的配置
  7. ASP.NET反射
  8. Redis系列(2)之数据类型
  9. 结构体的sizeof
  10. [置顶] 搭建apache+tomcat+memcached集群环境
  11. pull类型消息中间件-消息发布者(一)
  12. [SCOI2010]幸运数字 [容斥原理 dfs]
  13. c#抽取pdf文档标题(1)
  14. vue表单详解——小白速会
  15. javascript语言扩展:可迭代对象(4)
  16. HttpReponse
  17. 乾坤合一~Linux设备驱动之I2C核心、总线以及设备驱动
  18. cocos2d-x 3.0rc1 编译cpp-testsproject
  19. Linux环境更改Jenkins的主目录
  20. Android系统init进程启动及init.rc全解析

热门文章

  1. 【学习总结】Git学习-参考廖雪峰老师教程-总
  2. h5-canvas 像素操作
  3. 神经网路-SGD-1
  4. 转 spring注解式参数校验
  5. python之pymongo
  6. B. Vova and Trophies 字符串预处理+思维+贪心
  7. #!/usr/bin/python3的作用 解决vscode ImportError: No module named xxxx
  8. Java8之方法引用
  9. css实现弹出框
  10. beego框架返回json数据