C++语法和C不同之处

在考计算机的研究生考试中,经常需要学习C和C++这两门语言,大多数的人在大学期间已经学习了C语言,而C++跟C的基础语言又十分相似,我也是在学习的过程中找到了这些不同之处,希望对你有所帮助。

一、应用场合

C语言:C语言是结构化和模块化的语言,是面向过程的。当程序的规模较小时,C语言运用起来得心应手。但是当问题比较复杂、程序的规模比较大的时候,C语言就会展现出它的局限性。

C++:正是因为有大规模的程序需要去处理,C++就应运而生了。C++是由C发展而来的,与C语言兼容。​C++既可用于面向过程的结构化程序设计,也可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。

二、语法的不同之处

1、头文件

C语言:

#include<stdio.h> //标准输入、输出

*C语言中所有的头文件都带后缀 .h

C++:

#include<iostream> //输入输出流所包含的头文件

using namespace std;  //C++标准库中的类和函数是在命名空间std中声明的

*C++标准库中的类和函数是在命名空间std中声明的,C++中有系统提供的头文件不带后缀 .h,用户自己编制的头文件可以有后缀 .h。

2、输入/输出函数

C语言:用一个例子说明一下:

	int a;

	double b;

	scanf("%d",&a);//输入a的值

	scanf("%lf",&b);//输入b的值

	printf("a=%d\n",a);	//输出a的值

	printf("b=%6.2f\n",b); //输出b的值

	

%d和%f称为格式说明符,表示以此格式输出对应表达式的值,\n表示换行。%6.2f 中的6表示占六列,.2 表示输出对应浮点表达式值时只输出三位小数。

C++:也是用一个例子说明:

	int a=5;

	float b;​

	cin >>b;	//给变量b赋值

	cout << "a="<<a<<endl;  //输出a的值
	
	cout << "b="<<b<<endl;	//输出b的值 ​

	

cout必须要和”<<“一起使用,用于输出变量的值,cin必须要和”>>“一起使用,用于给变量赋值。我觉得C++中的输入输出流是很强大的,它不像C里面还要指定格式。endl表示换行。​

3、字符串

字符串是C++比C操作简单的一个点,它是在C++标准库中声明的一个字符串类。

C语言:

	char a[20]="changsha";

	char *p="changsha";

可以用上面两种方式 ,一种是用数组的方式存储字符串,另外一种是用字符串指针。这两种方法都有一个麻烦的地方就是,字符串的连接、比较啊等等都需要调用函数执行,比如strcmp函数、strcat函数、strcpy函数。

strlen:求字符串长度

strcmp:字符串比较

strcat:字符串连接

strcpy:字符串复制

C++:

	
#include <iostream>
#include <string>
 
using namespace std;
 
int main ()
{
   
   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;
 
   // 复制 str1 到 str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;
 
   // 连接 str1 和 str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;
 
   // 连接后,str3 的总长度
   len = str3.size();
   cout << "str3.size() : " << len << endl;
 
   return 0;
}

由此看来是不是方便了许多?

4、结构体和类

C语言:结构体

struct Student {
      //声明了一个名为Student的结构体类型

	int num;

	char name[20];

	char sex;} ;

	Student stud1,stud2; //定义了两个结构体变量

C++:类

class Student{
   

  private:

       int num;

       char name[20];

       char sex;

  public:

       void display() {
    

      		cout<<"num="<<num<<endl;

         	cout<<"name="<<name<<endl;

         	cout<<"sex="<<sex<<endl;}};

  Student stud1,stud2;//定义了两个Student类的对象

C++中保留了结构体,并且C++对struct进行了进一步的扩展,使struct在C++中可以和class一样当做类使用,而唯一和class不同的地方在于struct的成员默认访问修饰符是public,而class默认的是private。

5、C++数据类型
在C++中多了一种布尔型(bool)变量

6、引用类型
在C++很重要的一点就是增加了引用类型,主要用于扩充函数传递数据功能
1.指针有自己的一块空间,而引用只是一个别名;
2.使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小;
3.指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象
的引用,即不存在空引用,引用必须连接到一块合法的内存。
4.作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引
用的修改都会改变引用所指向的对象;
5.可以有const指针,但是没有const引用;
6.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
7.指针可以有多级指针(**p),而引用至于一级;
8.指针和引用使用++运算符的意义不一样;
9.引用必须在创建时被初始化。指针可以在任何时间被初始化。

那么c++为什么要提出引用:
我们在用指针的使用经常犯得错是什么:
1、操作空指针
2、操作野指针
3、不知不觉改变了指针的值,而后还以为该指针正常

而引用的提出就是解决这个问题:
引用区别于指针的特性是:
1、不存在空引用(保证不操作空指针)
2、必须初始化(保证不是野指针)
3、一个引用永远指向他初始化的那个对象(保证指针值不变)

还有很多细微的不同,这里只是列举了主要的,也没有涉及到面向对象的知识

全部评论

相关推荐

06-27 18:45
中山大学 Ruby
25届应届毕业生,来广州2个礼拜了,找不到工作,绝望了,太难过了…
应届想染班味:9爷找不到工作只能说明,太摆了或者太挑了。
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务