1. 输入、输出
C语言:
头文件:#include <stdio.h>
输入:scanf
输出:printf
C++:
头文件:#include <iostream>
using namespace std; //打开std命名空间
输入:cin //预定义好的输入流对象名,与提取运算符 >> 配合使用,从键盘上提取
输出:cout //预定义好的输出流对象名,与流插入运算符 << 配合使用, 换行使用endl
cin与scanf的区别:
scanf是格式化输入函数,cin是标准化输入流对象,scanf对类型有要求,cin不区分类型
例: int a;
char ch;
scanf("%d %c",&a,&ch);
cin>>a>>ch;
注意:cin不允许cin>>a,ch,必须每一个变量前都要有提取符>>
2. 常量的区别
C语言:
#define PI 3.14 //宏常量
#define MAX 10
enum {
LEN = 10}; //枚举常量
C++:
const int max = 10; //常变量
define与const区别:
define 定义的是宏常量
1. 宏常量在预编译的时候进行替换
2. 宏常量不分配空间
3. 宏常量并没有类型
const 修饰的是常变量
1. 常变量在编译时进行替换
2. 常变量分配空间
3. 常变量会有类型的检查
const在编译时进行替换例子:
int main()
{
const int a = 10;
int b = 0;
int *p = (int*)&a;
*p = 100;
b = a;
cout << " a = " << a << " b = " << b << " *p = " << *p << endl;
}
常变量与宏有一拼,常变量在编译阶段进行替换,宏在预编译时替换
3. 引用
&的使用:
- 数字之间:位运算与 : 1 & 0 --> 0
- 变量名前取地址:&a
- 类型与标识符中间:引用: int &c = a;
引用&:就是别名/外号, 一旦引用初始化为某个变量,就可以使用引用名称直接使用该变量,就是给该变量起了个别名
引用的特点:
- 没有空引用
- 定义引用时必须进行初始化
- 没有二级引用
引用的使用:
C语言使用指针交换a,b
void Swap_c(int *pa, int *pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
C++使用引用交换a,b
void Swap_cpp(int &a, int &b)//在函数中对a,b的交换,就是对实参的交换
{
int tmp = a;
a = b;
b = tmp;
}
C中使用指针间接交换了a,b;而C++使用引用直接操纵实参进行了交换
4. 函数重载
C语言通过函数名来区分函数,重载函数在c中编译是通不过的
C++支持函数的重载,可以用来作为重载函数的依据有:
- 参数类型不同
- 参数个数不同
注意:函数的返回值不能区分重载函数,因为编译器不能通过函数返回值来识别调用哪一个函数,现有的编译器无法达到对返回类型的识别
5. 默认形参
C++函数的形参可以带默认值,参数列表的默认值从右向左依次给,不能跳着给
调用函数时,实参是从左向右依次给,不能跳着给
void fun(int a, int b, int c = 0, int d = 0)
{
}
int main()
{
fun(12,23);//给实际参数的时候是从左向右依次给,不能跳着给
//fun(12, ,33);错误
}
6. 堆区开辟空间
C语言:
int *p = (int *)malloc(sizeof(int));
free(p);
C++:
int *s = new int;//开辟一个整型空间
int *p = new int(10);//开辟并初始化
delete s;
开辟数组空间:
int n;
cin>>n;
int *p = (int*)malloc(sizeof(int)*n);//C语言
int *s = new int[n];//C++
int *t = new int[n](100);//开辟并初始化,C99标准
free(p); p = NULL;
delete []s;
delete []t;