初學C 與C的一些區別點

2021-09-28 20:43:25 字數 2924 閱讀 9898

*1 c語言中定義了乙個結構體,在定義新成員時,必須加上關鍵字struct,除非用 typedef 重新定義

但 c++可以省略 struct關鍵字

2.c 語言中 ,函式不能是結構體的成員

struct

}; c語言中 非法!!

但 c++ 中 合法可以定義

3 c語言中,可以實現結構體成員呼叫函式

struct

void fun()

int main(void)

;a.p();//成員訪問函式;

return 0;

}c 語言用 malloc 跟free

c++ new 和delete

eg : int * p= new int(5);//申請乙個空間,大小為int 型別大小 並初始化為5 釋放時 delete p;

char* p1 = new char[5];memset(p1,0,4*5)//申請乙個char型別長度為5的陣列空間

釋放陣列,一點更要加 (標準規定)

eg: delete [ ] p1;

如果不加 將造成不匹配釋放,結果就很可能出現問題。

eg: int *p;

cout<<*p<<『 『《引用和指標的區別:

1 傳引用可以代替 一級指標 : 傳引用效率比傳指標快;

2 引用在概念上 就是個別名 ,但實際在底層上,引用時有自己的空間的

3 在底層處理上 ,引用跟指標一摸一樣,也就是說引用在底層上其實是有自己的空間的

4 引用 只能引用乙個實體

理解 :1 t& ——————>t* const

2 const t& a 就是說 引用 a 不能改 (實質就是指標)

sizeof(引用) 就是引用型別的大小 而sizeof(指標)就是4

指標有多級指標,卻沒有多級引用;

在標準c++語言中,臨時量(術語為右值,因其出現在賦值表示式的右邊)可以被傳給函式,但只能被接受為const &型別。這樣函式便無法區分傳給const &的是真實的右值還是常規變數。而且,由於型別為const &,函式也無法改變所傳物件的值。c++0x將增加一種名為右值引用的新的引用型別,記作typename &&。這種型別可以被接受為非const值,從而允許改變其值。
int a=10; int&& ra =10; 注意ra不是二級引用,這種情況稱為右值引用

int&& rrx = 200;

右值引用一定不能被左值所初始化,只能用右值初始化:

int x = 20; // 左值

int&& rrx1 = x; // 非法:右值引用無法被左值初始化

const int&& rrx2 = x; // 非法:右值引用無法被左值初始化

(const 型別常量 代替巨集常量)

來體驗下c++中const 的威力

#include

"windows.h"

#include

"iostream"

intmain

(void

)

在c語言中呢 ?

```c

#include

"stdio.h"

intmain

(void

)

答案是: 直接改變 ,所以c語言的編譯器並不會在編譯期間替換 const 關鍵字的常量

**const 相當於替換 跟define 的巨集定義有點類似 ,但是define 在預處理期間替換,而const 在編譯期間替換;**

即 const型別常量可以代替巨集替換

```cpp

#include"windows.h"

#include"iostream"

using namespace std;

int& swap(int& ra, int& rb)

#if 0

int main(void)

具有檔案作用域

內聯函式的目的:修補巨集的缺陷(不能除錯的缺陷)

內聯函式 :用inline修飾的函式,c++編譯器 在編譯期間就會呼叫內聯函式 ;它也具有巨集的替換效果,

舉例子 : inline int add(int a,int b)

編譯期間;編譯器會將內聯函式替換相應的函式;在函式前加 inline 只是建議編譯器當作內容函式處理 ,但編譯器有自己的主張(遞迴 ,複雜函式等)

在函式前加上 inline

內聯函式 在debug 下 在專案->屬性->常規->程式資料庫

2 專案->屬性->優化->只適用於inline;

暫時定義變數型別 ,編譯期間編譯器對具體型別進行推演,推演後 替換auto關鍵字;

c++中怎麼看乙個變數的型別?

auto a =5;auto b=123.43;

cout<1 auto 與指標 一起使用時;

auto * 與auto沒有任何區別

2 auto 與& (引用)一起使用時

auto 與 auto& 有區別 ;加了就是引用 ,沒加就是乙個普通變數

eg : a=10;

auto ra =a ;//ra只是乙個普通變數

auto& ra =a;//ra就是a的引用

3 auto 同時在一行定義多個變數時,型別必須一致;

eg: auto a=5,b=4,c=23.4;//將會報錯

4 auto 不能作為函式的引數

5 auto 不能推演陣列型別

6 範圍for 迴圈

eg :

int a=;

for(auto& e:a)

a*=5;

for(auto e:a)

cout<< e<<』 '

C 與C 的一些區別

最近在學習c 總結了一些c 與c 的區別 1.c 不支援多重繼承。2.c 檔案是.h,cpp,而c 檔案是.cs。3.c 宣告類時,括號後沒有 4.與c c 不同,c 在類的外部不能宣告全域性變數,也沒有全域性函式。6.c 中的var相當於c 中的auto。7.c 中不管巢狀級別如何,都不能在第乙個...

C 與C 的一些語法區別

這學期有c 的課,由於之前有c和c 的一些基礎,所以並沒有從頭開始學習其語法,在這裡總結一下實際使用中發現的c 與c 的一些區別,便於以後使用時進行查閱 其實是為了考期複習方便2333 c是完全面向過程的語言,用於開發規模較小的程式效率很高,但是程式較大,就顯得 量多,編寫效率下降了。c 是半面相物...

C 的一些謹慎點!

1.集合介面與集合型別 1 集合的命名空間 大多數集合類都可以在system.collections和system.collections.generic命名空間中找到。泛型集合位於system.collections.generic命名空間中 專用於特定型別的集合類位於system.collect...