C語言和C 的區別

2021-10-08 02:32:55 字數 4256 閱讀 6841

​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中這麼想的,先分為幾步 ...