2、原始檔區別
c語言檔案字尾為.c,c++原檔名字尾為.cpp
如果在建立原始檔時什麼都不給,預設是.cpp
3.返回值不同
c語言中,如果乙個函式沒有指定返回值型別,預設為int型別,並返回乙個隨機數,一般為0xcccccccc
在c++中,如果函式沒有返回值則必須指定為void型,否則編譯不能通過
4、引數列表
在c語言中,函式沒有指定的引數列表時,預設可接收任意多個引數
在c++中,有嚴格的引數型別檢測,沒有引數列表的函式,預設為void,不接收任何引數。
預設引數
預設引數是宣告和定義時函式的引數指定乙個預設值。在呼叫該函式時,如果沒有指定實參則採用預設值,否則使用指定的實參。
如下**:
#include
using namespace std;
void test(int a = 1)
cout << a << endl;
int main()
test();
test(10);//輸出的結果是1
return 0;//函式輸出結果是10
而預設引數是分為兩類的,一類是全預設,一類是半預設。
首先是全預設,全預設引數所有引數都有預設值,如果沒有手動傳參,那麼編譯器會使用預設引數列表中的引數。但是這裡值得注意的是,如果傳參的時候只傳了部分引數,那麼該值會被從左至右匹配。
**示例:
#include
using namespace std;
void test(int a = 1,int b = 2, int c = 3)
cout << a << " " << b << " " << c << endl;
int main()
test();//1 2 3
test(10);//10 2 3
test(10, 20);//10 20 3
test(10, 20, 30);//10 20 30
return 0;
半預設引數**演示:
void test(int a ,int b = 2, int c = 3)
cout << a << " " << b << " " << c << endl;
void test1(int a, int b, int c = 3)
cout << a << " " << b << " " << c << endl;
其中test函式至少傳乙個引數,test1函式至少傳兩個引數,函式才可以正常執行。
注意:帶預設值的引數必須放在引數列表的最後面。因為傳參是從右向左的。
預設引數不能同時在函式宣告和定義**現,只能二者留其一。
預設值必須是常量或者全域性
變數。c語言並不支援預設。
5、c++支援函式過載,c語言不支援
在實際開發中,有時候我們需要實現幾個功能類似的函式,只是有些細節不同。例如希望交換兩個變數的值,這兩個變數有多種型別,可以是 int、float、char、bool 等,我們需要通過引數把變數的位址傳入函式內部。在c語言中,程式設計師往往需要分別設計出三個不同名的函式,其函式原型與下面類似:
void swap1(int *a, int *b); //交換 int 變數的值
void swap2(float *a, float *b); //交換 float 變數的值
void swap3(char *a, char *b); //交換 char 變數的值
void swap4(bool *a, bool *b); //交換 bool 變數的值
但在c++中,這完全沒有必要。c++ 允許多個函式擁有相同的名字,只要它們的引數列表不同就可以,這就是函式的過載(function overloading)。借助過載,乙個函式名可以有多種用途。
引數列表又叫引數簽名,包括引數的型別、引數的個數和引數的順序,只要有乙個不同就叫做引數列表不同。
#include
using namespace std;
//交換 int 變數的值
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
//交換 float 變數的值
void swap(float *a, float *b){
float temp = *a;
*a = *b;
*b = temp;
//交換 char 變數的值
void swap(char *a, char *b){
char temp = *a;
*a = *b;
*b = temp;
//交換 bool 變數的值
void swap(bool *a, bool *b){
char temp = *a;
*a = *b;
*b = temp;
int main(){
//交換 int 變數的值
int n1 = 100, n2 = 200;
swap(&n1, &n2);
cout<
//交換 float 變數的值
float f1 = 12.5, f2 = 56.93;
swap(&f1, &f2);
cout<
//交換 char 變數的值
char c1 = 『a』, c2 = 『b』;
swap(&c1, &c2);
cout<
//交換 bool 變數的值
bool b1 = false, b2 = true;
swap(&b1, &b2);
cout<
return 0;
執行結果:
200, 100
56.93, 12.5
b, a
1, 0
過載就是在乙個作用範圍內(同乙個類、同乙個命名空間等)有多個名稱相同但引數不同的函式。過載的結果是讓乙個函式名擁有了多種用途,使得命名更加方便(在中大型專案中,給變數、函式、類起名字是一件讓人苦惱的問題),呼叫更加靈活。
在使用過載函式時,同名函式的功能應當相同或相近,不要用同一函式名去實現完全不相干的功能,雖然程式也能執行,但可讀性不好,使人覺得莫名其妙。
注意,引數列表不同包括引數的個數不同、型別不同或順序不同,僅僅引數名稱不同是不可以的。函式返回值也不能作為過載的依據。
函式的過載的規則:
函式名稱必須相同。
函式的返回型別可以相同也可以不相同。
僅僅返回型別不同不足以成為函式的過載。
6、指標和引用
c語言中函式傳參方式有兩種:傳值和傳址
以傳值方式,在函式呼叫過程中會生成乙份臨時變數用形參代替,最終把實參的值傳遞給新分配的臨時形參。它的優點是避免了函式呼叫的***,卻無法改變形參的值。如果要改變實參的值,只能通過指標傳遞。
指標可以解決問題,但是不安全,因此在c++中引入了引用。
引用:引用不是新定義的乙個變數,他是原變數的乙個別名,編譯器不會為引用變數開闢空間,它和他引用的變數共用同一塊記憶體空間。
型別& 變數(物件名)=引用變數
int &num1=num0;
引用特性;
1、引用定義時必須初始化
2、乙個變數可以有多個引用
3、引用一旦繫結乙個實體就不能改變為其他變數的引用
//指標和引用的區別
引用不可以為空,但指標可以為空
引用不可以改變指向,對乙個物件」至死不渝」;但是指標可以改變指向,而指向其它物件
引用的大小是所指向的變數的大小,因為引用只是乙個別名而已;指標是指標本身的大小,4個位元組。
7、命名空間
在c++中,變數、函式和類都是大量存在的,這些變數、函式和類的名稱將都存在於全域性命名空間中,會導致很多衝突,使用命名空間的目的是對識別符號的名稱進行本地化,以避免命名衝突或者名字汙染,namespace關鍵字的出現就是解決這種問題。而c語言中沒有。
8、輸入與輸出
cout代表c++的輸出流
cin代表c++的輸入流
它們都是在標頭檔案「iostream」中定義。
「cout」必須與」<<」一起使用,「<<」起到插入的作用。
在一條語句中可以多次使用「<<」輸出多個資料。
如:cout<
#include
using namespace std;
int main()
int a,b;
cout<<「請輸入a,b的值」<
cin>>a>>b;
cout<<「輸出a的值」<
return 0;
C語言和C 的區別
c和c 的關係 就像是win98跟winxp的關係。c 是在c的基礎上增加了新的理論,玩出了新的花樣。所以叫c加加。c和c 的區別 c是乙個結構化語言,它的重點在於演算法和資料結構。c程式的設計首要考慮的是如何通過乙個過程,對輸入 或環境條件 進行運算處理得到輸出 或實現過程 事務 控制 c 首要考...
C語言和C 的區別
c 是c發展來的!c 是物件導向的語言,而c是結構化的語言!c的所有 在c 上都能應用,而c 的 在c上不能應用!c 是功能更強大的c!c語言與vc 的區別有很多 1,全新的程式程式思維,c語言是面向過程的,而vc 是物件導向的。2,c語言有標準的函式庫,它們鬆散的,只是把功能相同的函式放在乙個標頭...
C語言和C 的區別
1.字尾不同 2.關鍵字不同 c語言 c99有32個關鍵字 c c 98有63個關鍵字 3.c 面向過程 c 基於物件導向 面向過程與物件導向的區別?1 面向過程 c語言 eat 蛋炒飯 把所有要做的放在一起,無法做到飯與菜的分離,如果想改變菜會造成浪費 舉個例子 開車走在c中這麼想的,先分為幾步 ...