基本功練習 2 26

2021-06-04 12:35:17 字數 990 閱讀 1003

型別轉換

先看下面一段程式,這段程式摘自《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元,...