第一天之C 對C語言的加強

2021-09-29 07:35:25 字數 3783 閱讀 6700

所謂namespace,是指識別符號的各種可見範圍。c++標準程式庫中的所有識別符號都被定義於乙個名為std的namespace中。

在c++中,名稱(name)可以是符號常量、變數、巨集、函式、結構、列舉、類和物件等等。為了避免,在大規模程式的設計中,以及在程式設計師使用各種各樣的c++庫時,這些識別符號的命名發生衝突,

標準c++引入了關鍵字namespace(命名空間/名字空間/命名空間/名域),可以更好地控制識別符號的作用域。

c中的命名空間

在c語言中只有乙個全域性作用域

c語言中所有的全域性識別符號共享同乙個作用域

識別符號之間可能發生衝突

c++中提出了命名空間的概念

命名空間將全域性作用域分成不同的部分

不同命名空間中的識別符號可以同名而不會發生衝突

命名空間可以相互巢狀

全域性作用域也叫預設命名空間

c++命名空間的定義:

namespace name

c++命名空間的使用:

使用整個命名空間:using namespace name;

使用命名空間中的變數:using name::variable;

使用預設命名空間中的變數:::variable

預設情況下可以直接使用默 認命名空間中的所有識別符號

/* #include#:預處理標誌,後面跟預處理指令,include:預處理指令,包含 :c++標頭檔案,輸入輸出流

這行的作用就是在預編譯之前先執行這行**。系統提供的標頭檔案用<>括起來

#include這個標頭檔案是c標準的標頭檔案,c++中叫非標準庫檔案。

using namespace std;使用標準命名空間。也就是說c++當中的標準庫檔案,函式,物件啊等都存放在std空間中,

作用:作用是在編寫大程式的時候能夠定義重複的變數,(識別符號)

當需要呼叫標準空間中的物件,函式的時候呼叫方法:std::cout std::cin std::endl;需要加雙冒號

#include#include的區別:

使用#include的時候,需要使用using namespace std;而#include不需要

*/#include //using std::cout; //使用std空間中cout物件。::呼叫的意思

//using std::endl;

int main(void)

register關鍵字請求編譯器將變數直接儲存在暫存器中,提高訪問速度。

c語言中無法取得register變數的位址,c++中可以取得register變數的位址

c++編譯器發現程式中需要取register變數的位址時,register對變數的宣告變得無效

int main(void)

在c語言中重複定義多個同名的全域性變數是合法的。

在c++中不允許定義多個同名的全域性變數。

c語言中多個同名的全域性變數最終會被鏈結到全域性資料區的同乙個位址上。

int g_var;

int g_var = 1;

c++直接拒絕這種二義性的做法。

c語言的struct關鍵字定義一組變數的集合,c編譯器並不會認為這是一種新的資料型別。

c++中的struct是乙個新型別的定義宣告。

struct student ;

int main(void)

; cout << "s1的年齡是" << s1.age << endl;

system("pause");

return 0;

}

c語言中的預設型別在c++中是不合法的。

在c語言中

int f( );表示返回值為int,接受任意引數的函式

int f(void);表示返回值為int的無參函式

在c++中

int f( );和int f(void)具有相同的意義,都表示返回值為int的無參函式

f(i)

g()int main(int argc, char *ar**)

上面的定義在c語言中可以通過,但在c++中不能通過

c++中的bool型別可取的值只有true和false

理論上bool只占用乙個位元組,如果多個bool變數定義在一起,可能各佔1個bit,這取決於編譯器的實現

true代表真值,編譯器內部用1來表示

false代表非真值,編譯器內部用0來表示

c++編譯器會在賦值時將非0的值轉換為true,將0值轉化為false

1)c語言返回變數的值 c++語言是返回變數本身

c語言中的三目運算子返回的是變數值,不能作為左值使用

c++中的三目運算子可直接返回變數本身,因此可以出現在程式的任何地方

2)注意:三目運算子可能返回的值中如果有乙個是常量值,則不能作為左值使用

(a < b ? 1 : b )= 30;

3)c語言如何支援類似c++的特性呢?

====>當左值的條件:要有記憶體空間;c++編譯器幫助程式設計師取了乙個位址而已

int main(void)

輸出為30

const基礎知識

const int a; // 常整形數

int const b; // 常整形數

const int * c; //指向常整型的指標,指標所指向的記憶體資料不能被修改,指標本身可以修改

int *const d; //常指標,指標變數不能修改,只想的記憶體空間的值可以修改

const int *const e; // 乙個指向常整形的常指標,都不能被修改

const關鍵字定義常量,意味著唯讀。
const好處

合理的利用const,

1指標做函式引數,可以有效的提高**可讀性,減少bug;

2清楚的分清引數的輸入和輸出特性

c中「冒牌貨」

int main()

c++編譯器對const常量的處理

當碰見常量宣告時,在符號表中放入常量 =問題:那有如何解釋取位址

編譯過程中若發現使用常量則直接以符號表中的值替換

編譯過程中若發現對const使用了extern或者&操作符,則給對應的常量分配儲存空間(相容c)

注意:c++編譯器雖然可能為const常量分配空間,但不會使用其儲存空間中的值。

結論:

c語言中的const變數

c語言中const變數是唯讀變數,有自己的儲存空間

c++中的const常量

可能分配儲存空間,也可能不分配儲存空間

當const常量為全域性,並且需要在其它檔案中使用

當使用&操作符取const常量的位址

當const int &a = 10; const修飾引用時,也會分配儲存空間

c++中的const修飾的,是乙個真正的常量,而不是c中變數(唯讀)。在const修飾的常量編譯期間,就已經確定下來了

對比加深

c++中的const常量類似於巨集定義

const int c = 5; ≈ #define c 5

c++中的const常量與巨集定義不同

const常量是由編譯器處理的,提供型別檢查和作用域檢查

巨集定義由預處理器處理,單純的文字替換

第一天C語言

include int main 建立工程 檔案 新建 專案 選visual c 空專案 檢視 解決方案資源管理器 右鍵 原始檔 新增 新建項 shift alt enter 編輯區最大化 暫停螢幕 include include 暫停 標頭檔案 int main 電腦組成 馮諾依曼體系結構 處理器...

C語言第一天

簡單的c語言程式 1 include2 intmain 3 執行結果 this is a first c program.this is second line 第一行 include 標頭檔案,即下方的 會呼叫的函式 方法類 庫 由這個函式庫提供方法的支援 第二行 int main 主函式,全部程...

JNI學習之C語言第一天

引入標頭檔案。類似import 只有函式的宣告,並沒有函式的實現,編譯時,會去找到函式的實現。define crt secure no warnings 巨集定義 include include void main c的基本資料型別 int short long float double char ...