Head First C (前半部分)讀書筆記

2021-07-09 14:50:25 字數 2365 閱讀 3497

記錄一些之前沒有注意到的小細節。

char ex[20];

scanf("%19s", ex);

scanf()用於吸收結構化字串,%19s可以防止陣列越界,不吸收回車。

fgets(ex, sizeof(ex), stdin);
fgets()用於吸收非結構化字串,sizeof(ex)是吸收的字串的總長度,包括'\0',這裡為20,吸收回車。

int j;

scanf("%i", &j);

%i自動將輸入轉化為十進位制,接受的輸入樣式為:十進位制、十六進製制、八進位制,如:120xc014

printf("%i", j);
這裡%i%d沒什麼區別。另外,printf()用於輸出格式化字串,實際上呼叫fprintf(),即:fprintf(stdout, "%i", j);

若要直接輸出字串則可以使用puts(),如:puts("hello world!");

puts()會自動在字串結尾輸出回車。即:puts("");==printf("\n");

int doses = ;

printf("%i", 3[doses]);

輸出結果為1000,參考帖子:*(3+doses)怎麼就等於3[doses]了

doses[3] == *(doses + 3) == *(3 + doses) == 3[doses]

結構體/聯合體初始化:

typedef

union quantity;

char str = "hello world!"; 

char *p = str;

printf("%s == %s\n", str, p);

printf("%i != %i\n", sizeof(str), sizeof(p));

輸出結果為:

hello world! == hello world!

13 != 8

故將陣列位址作為函式引數時,要考慮是否需要加多乙個長度引數接收陣列的長度。

位欄位主要用於一些使用空間很寶貴的程式設計中,如嵌入式程式設計。成員型別必須為unsigned int,需要用:指定成員所佔的位數。如:

typedef

structsurvey;

在同一結構中,位欄位才能節省空間。

strdup()將字串複製到堆上,要用free()釋放空間,不釋放會導致記憶體洩漏。如:

char str = "hello world!"; 

char *copy = strdup(str);

printf("%s == %s\n", str, copy);

free(copy);

strdup()標頭檔案為string.h,free()標頭檔案為stdlib.h。

size_tunsigned int型別,是陣列下標值的型別,也是sizeof操作符返回的值的型別,也是str*相關函式返回的長度等的型別。

在c語言中,所有的表示式都有值。如:z = y = x = 4x = 4返回值為4,於是z = y = 4y = 4返回值為4,於是z = 4。這也就是」連等賦值「。

%08x中,0是標誌字元,當輸出值的寬度小於最小寬度(這裡設定為8)時用」0「(預設用空格)填充。

malloc()返回的是通用指標,即void *型別的指標。

c 前半部分總結

建構函式 與類同名的特殊成員函式,主要用來初始化物件的資料成員。定義形式如下 class x 特點沒有返回值,可以過載,由系統自動呼叫,不允許在程式中顯示呼叫。例 include using namespace std classx void main 析構函式 與類同名的另一類特殊成員函式,作用有...

奇數字於偶數的前半部分

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。兩個思路吧,第乙個思路 類似冒泡演算法,前偶後奇數就交換 class solution 第二個思路 再建立乙個陣列 class so...

java正規表示式匹配網域名稱前半部分

string spath url.tostring replacefirst pattern,替換首次出現的位置 以下省略 url構成 http http ftp 雙斜槓 伺服器網域名稱或者ip位址 點和字母數字組成 埠號 斜槓 字母陣列組成的專案名 例如 這表示在ip192.168.1.100的伺...