C++与C语言常用的语法对比
前言本人在校学习的第一门语言是C由于操作系统这门课程实验的需要要求在linux下使用GCC编译器编译C程序代码为了写代码的方便本人先采用VS2017写了C版本的代码再根据C和C语言两个语法的不同将程序进行修改成C程序。由于本人没有学过C语言对C语言的语法也不是很熟悉写本文的目的是记录下修改过程的遇到的几个注意点方面以后参考1.头文件c1234#include iostream#include ctime#include stdlib.h#include randomC1234567891011#include time.h#include stdlib.h#include sys/types.h#include sys/msg.h#include sys/ipc.h#include sys/wait.h#include stdio.h#include unistd.h#include stdlib.h#include stdbool.h#include malloc.h注以上两种语言的头文件没有给出直接对应的关系在使用时若不知道需要哪些头文件可以直接全部复制使用。2.结构体structC说明C的struct成员包含成员函数123456789101112structHello{voidsayHello(char*name){printf(你好%s\n,name);}};intmain(){Hello hello;hello.sayHello();exit(0);}C说明C语言的struct的成员只能是数据不支持函数因此若要定义结构体的函数需要使用函数指针实现123456789101112structHello{void(*sayHello)(char* name);//函数名为指针类型};voidsayHello(char* name){printf(你好%s\n,name);}intmain(){structHello hello;//声明结构体的变量需要加structhello.sayHellosayHello;//C语言需要使用函数指针指向函数的声明hello.sayHello(浅若清风);return0;}3.动态数组的创建与删除以一维和二维动态数组为例 C创建C使用new自动为动态数组分配空间删除C使用delete为动态数组释放内存12345678910111213141516171819voidf(){intn;intm;int*Array1;//声明一维动态数组Array1newint(n);//为一维动态数组分配空间元素个数为nint**Array2;//声明二维动态数组Array2newint*[n];//为二维动态数组分配空间n个指针空间n行for(inti;in;i){Array2[i]newint[m];//为每一行分配内存空间m个整数空间m列}//释放内存delete[]Array1;for(inti0;in;i){delete[]Array2[i];}delete[]Array2;}C创建C使用calloc为动态数组分配空间删除C使用free()为动态数组释放内存12345678910111213141516171819voidf(){intn;intm;int*Array1;//声明一维动态数组Array1(int*)calloc(n,sizeof(int));//为一维动态数组分配空间元素个数为nint**Array2;//声明二维动态数组Array2(int**)calloc(n,sizeof(int*));//为二维动态数组分配空间n个指针空间n行for(inti;in;i){Array2[i](int*)calloc(m,sizeof(int));//为每一行分配内存空间m个整数空间m列}//释放内存free(Array1);for(inti0;in;i){free(Array2[i]);}free(Array2);}malloc函数与calloc函数的区别malloc函数不能初始化所分配的内存空间在动态分配完内存后里边数据是随机的垃圾数据。calloc函数能初始化所分配的内存空间在动态分配完内存后自动初始化该内存空间为零。4.函数顺序问题C中写在前面的函数可以直接调用写在后面的函数C中被调用的函数需要写在调用函数之前5.类class类是C引入的类型可以包含数据也可以包含函数解决了C语言struct只能包含数据的缺陷。 另外一个不同点是struct是默认public而class默认private下面以一个链队的例子来体现C的 class的用法并与C语言用struct实现进行对比