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++:
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;