1. 程式人生 > >C 語言中忽略的一些事情(一)

C 語言中忽略的一些事情(一)

  1. switch …case 語句 C語言中分支語句中常用的switch…case語句,常見的格式有:
switch(flag){

case 常量1:
printf("常量1");
break;

case 常量2:
printf("常量2");
break;
...
default:
printf("default");
break;

}

大家都知道,當前case標籤中沒有找到對應的常量時,就會自動選擇default執行,那麼default的位置對程式執行有關係呢?如果我把default語句放到switch中的第一個優惠如何呢?修改一下程式碼:

switch(flag){

default:
printf("default");
break;

case 常量1:
printf("常量1");
break;

case 常量2:
printf("常量2");
break;
...

}

這樣修改後,會不會直接執行default中的程式碼呢? 經過程式設計測試發現,並不是這樣的,而是和之前執行一樣的,所以case和default的位置對程式的執行沒有影響。

  1. sizeof關鍵字 sizeof在C語言中是一個操作符而不是一個函式,它經常被程式設計師認為是一個函式而非一個操作符。
char* p = new char[32];
int cnt = sizeof * p;

上面的程式碼有問題嗎? 沒有問題,那執行結果是多少?32?1?或者其他數字? 答案是1; 如果我們加上括號呢?哪答案又是多少呢?

char* p = new char[32];
int cnt = sizeof (* p);

答案還是1。 因為sizeof操作符返回的是p指向物件的型別的位元組數,和物件的多少沒有關係。因為上面的例子中p指向的一個char型別的記憶體,而char型別就是隻佔一個位元組,所以返回就是1,和分配多少個char型別的記憶體沒有關係。 修改一下程式碼:

int* p = new int[32];
int cnt = sizeof (* p);

那麼cnt的結果就是4了,因為一個int在記憶體中佔四個位元組。

什麼時候加括號呢?當sizeof的運算元是個型別名,兩邊必須加上括號(因為這個原因,有人就誤以為這個一個函式),但運算元是變數則不必加括號

int cnt = sizeof (int);
  1. 什麼是宣告,什麼是定義 記住:在C語言中物件有且只有一個定義這裡的物件並不是C++中的類物件,這類的物件只是和連結器相關的,比如函式和變數。

宣告:說明了在其他地方建立了物件的名字,它允許你使用這個名字,可以多次出現;甚至可以出現在不同的檔案中,需要使用關鍵字extern. 定義:是一種特殊的宣告,它建立了物件,只出現在一個地方