C与C++区别,C到C++的升级

C++与C的关系

C++ = C 结构化编程 + 面向对象(OO)+ STL(模板)泛型编程
在这里插入图片描述

  • C++继承了所有的C特性
  • C++在C的基础上增加了很多新特性
  • C++设计的目标是运行效率与开发效率的统一

从C到C++的升级

1.更加强调语言的实用性

C++所有变量都可以在需要使用时在定义,C语言中的变量都必须在作用域开始的位置定义!!

int c = 0forint i=1; i<=3; i++{
	for(int j=1; j<=3; j++)
	{
		c += i*j;
	}
}
2.register关键字的变化

C语言中无法获取register变量的地址,C++中可以获得register变量的地址
C++编译器发现程序中需要取register变量的地址时,register对变量的生命变得无效

3.全局变量声明规则的变化

在C语言中,重复定义多个同名的全局变量是合法的,在C++中,不允许定义多个同名的全局变量
C语言中的多个同名的全局变量最终会被链接到全局数据区的同一地址空间上。

4.struct关键字的加强

C语言中的struct定义了一组变量的集合
C语言中struct定义的标志符并不是一种新的类型
C++中的struct用于定义一个全新的类型

	C																	C++
typedef struct _tag_student Student;                       			struct Student
struct _tag_student 												{
{												等价						const char* name;
    const char* name;														int age; 
    int age;														};
};
5.函数的返回值与参数类型默认类型

C++中所有的标志符都必须显示的声明类型

C语言中的默认类型在C++中是不合法的

  • 在C语言中:
    int f() 表示返回值为 int,接受任意参数的函数
    f(void) 表示返回值为 int 的无参函数
  • 在C++中:
    int f() 和 int f(void)具有相同的意义,表示返回值为int的无参函数
6.const的进化

C语言中的const:

  • const修饰的变量是只读的,本质还是变量
  • const修饰的局部变量在栈上分配空间
  • const修饰的全局变量只在只读存储区分配空间
  • const只在编译器有用,在运行期无用(const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边)

C语言中的const使得变量具有只读属性,const将具有全局生命周期的变量存储于只读存储区(const不能定义真正意义的常量!C语言真正意义的常量是枚举)

test.c
#include <stdio.h>

int main()
{
   const int c = 0;
   int *p = (int *)&c;
   
   printf("Begin...\n");
   
   *p = 5;
   
   printf("c= %d\n", c);
   printf("End...\n");
   return 0;
}
 test.cpp
#include <stdio.h>

int main()
{
	const int c = 0;
	int *p = (int *)&c;
	
	printf("Begin...\n");
	
	*p = 5;
	
	printf("c= %d\n", c);
	printf("End...\n");
	return 0;
}

分别用gcc和g++编译上述两个源代码,test.c的输出 c = 5, test.cpp的输出 c = 0。

  • C语言中的const变量
    C语言中const变量是只读变量,会分配存储空间(不能出现在赋值符号的左边)

  • C++中的const常量
    会将const修饰的常量放入符号表,再次调用时用符号表中的值替换变量,类似于宏定义。但是和宏不一样:
    1.const常量是由编译期处理的
    2.编译期对const常量进行类型检查和作用于检查
    3.宏定义是预处理器处理的,单纯的文本替换

  • 可能分配存储空间
    1.当const常量为全局,并且需要在其他文件中使用
    2.当使用&操作符对const常量取地址

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值