型別轉換
先看下面一段程式,這段程式摘自《c專家程式設計》:
如果是有這樣一段程式的話,你永遠無法知道x的值到底是多少,因為這句賦值語句x=array[d+1];根本不會執行。原因在哪?經過除錯發現程式執行到if語句進行判斷完之後,直接跳過下面一條語句的執行。下面來分析一下原因,因為sizeof求算型別大小時的返回值是unsignedint型別,而d是signed int,if語句測試兩者大小,d會自動公升級為unsignedint,-1轉換為unsigned int是乙個很大的正整數,所以表示式的值永遠為假,因此後面的賦值語句永遠不會執行。這裡面就是型別轉換帶來的bug,如果稍不注意,則可能對整個工程或者專案造成無法**的後果,而這個bug是很難直接除錯能夠除錯得出來的。
int array = ;
char str = 「hello!」;
性質一樣,陣列名不能改變大小,sizeof計算的是陣列的位元組數;
char *str1 = 「hello!」;
char *str2 = str;
int *array1 = array;
性質一樣,都是指標,可以改變大小,sizeof計算的結果是4位元組。
測試**:
#include
int main(void)
;char str="hello!";
int a=sizeof(array);
int b=sizeof(str);
printf("%d\n",a);
printf("%d\n",b);
char *str1="hello!";
char *str2=str1;
int *array1=array;
int c=sizeof(str2);printf("%d\n",c);printf("%s\n",str2);
int d=sizeof(array1);printf("%d\n",d);printf("%s\n",array1);
}
C C 程式設計基本功
c c 程式設計基本功 c 其內容精深博大,任何一塊都信手拈來者不多,究其精者更不多,不論何其原因,最重要一點就是其基本功之不紮實,對基礎性東西不加以精深研究。我也是一樣,經過幾輪經典的面試,讓我痛改以前的不紮實的作風,以此來磨礪自己。一 記憶體管理篇 乙個由c c 編譯的程式占用的記憶體分為以下幾...
機器學習基本功
1 回歸模型 重點關注xgboost 注 introduction to statistical learning的2 7章 2 分類模型 統計學習方法 3 神經網路 a 普通的ann b 處理影象的cnn c 處理文字和語音的rnn lstm 4 資料壓縮 視覺化 流行學習 manifold le...
程式提速 程式設計基本功
由於現在硬體的高配置,已經很少有程式設計師去關注程式效率的問題,不過相對於做演算法的朋友,效率是永遠的追求。這裡談談我優化程式的一點經驗,供新手討論,高手見笑了。一 程式設計基本功 前幾天給員工做培訓,隨口出了道題,不想竟難倒了所有人。題目是這樣的 現行的人民幣面值有1角,5角,1元,5元,10元,...