C 學習筆記(二)

2021-04-14 00:59:04 字數 1965 閱讀 6452

本期話題:字串文字常量,指標,引用

1、關於字串文字常量

sizeof("bohr") == 5

字串文字常量的型別是「適當個數的const字元的陣列」,所以"bohr"的型別就是const char[5]

下面的賦值是可以的:char* p = "bohr";因為在c/c++原來的定義裡,字串文字常量的型別就是char*

字串文字常量是靜態分配的,他們被分配在程式的靜態資料區,所以讓函式返回字串文字常量是安全的。

[code = c/c++]

const char* test()

[/code]

兩個相同的字串文字常量是否被分配在一起,取決於編譯器實現。

[code = c/c++]

const char* p = "test";

const char* q = "test";

if (p == q) cont<<"one!/n"; // 結果隨編譯器而不同

[/code]

為使程式簡潔,可以將長字串分開書寫,下面的書寫方式也是正確的:

[code = c/c++]

char alpha = "abcdefgh"

"ijklmn";

[/code]

2、常量在定義時必須進行初始化 

[code = c/c++]

const int num = 100;  // ok

const int x;    // wrong!

[/code]

3、常量指標和指標常量

[code = c/c++]

char* const cp; // 指向char的const指標

char const* cp; // 指向const char的指標

const char* cp; // 指向const char的指標

[/code]

可以這樣理解:*代表指標,按照自右向左的順序閱讀。

cp is a const pointer to char

cp is a pointer to char const

cp is a pointer to const char

char const和const char是一樣的。

4、不能將常量的位址賦給乙個未加限制的指標

[code = c/c++]

const int c = 2;

int* pi = &c;  // 錯誤:用const int* 來對int* 進行初始化

*pi = 3;    // 這樣,就造成來常量c的值可以被修改

[/code]

5、引用

引用的最明顯的(也是最簡單和最自然的)一種實現方式是作為乙個常量指標,每次使用它的時候都自動做間接訪問。所以:

[code = c/c++]

int ii = 0;

int& rr = ii;

rr++;     // 是對ii加1,而不是將rr指向下乙個位置

int* pp = &rr;  // pp指向的是ii

[/code]

一些情況下,引用可以通過編譯器的優化而去掉,使得在執行時根本不存在任何表示引用的東西。

引用在使用時必須初始化,對普通的t& 的初始式必須使用乙個型別t的左值。左值是乙個物件,可以取得它的位址。

[code = c/c++]

double& dr = 1; // 錯誤:要求左值

[/code]

但是,const t& 的初始式不必是左值

[code = c/c++]

const double& cdr = 1; // ok

[/code]

這相當於

[code = c/c++]

double temp = double(1); // 首先建立乙個具有正確值的臨時變數

const double& cdr = temp; // 用臨時變數作為引用的初始式

[/code]

C 學習筆記(二)

在學習最新的c 標準過程中會碰到很多新問題,這些問題有時候很難理解為什麼會發生。更奇怪的是,似乎跟開發工具有關。如下面這個在vs2005下的例子 word istatus ifstream ifs if i it szprlfile,0 0 std locale global std locale ...

C 學習筆記二

chapter22 滾動字幕程式 1.ondraw函式中寫畫得內容.使用invalidate 或者 invalidaterect 重新整理 觸發ondraw 得呼叫.2.windows不允許直接 訪問顯示硬體 我們必須通過和視窗 關聯得 裝置環境 跟顯示硬體 通訊 裝置環境由c 得cdc類 物件表示...

C 學習筆記(二)

if expression exprsssion必須為bool值 checked和unchecked操作符用於整數算術運算時控制當前環境中的溢位檢查。下列運算參與了check和unchecked檢查 switch case語言 不容許遍歷 foreach 語句 預編譯指令 異常處理 類的宣告 類的宣...