1、c中printf計算引數時是從右到左壓棧的。
定義乙個陣列 int arr[ ] =
再定義乙個指標 sint *prt = arr;
printf("%d\n",*ptr); 此時ptr指向第乙個元素6;
*(ptr++)+ = 123展開為*ptr = *ptr + 123; ptr++; 此時ptr指向第二個元素7;
printf(「%d,%d\n」,*ptr,*(++ptr)); 從右到左運算,第乙個是(++ptr),也就是ptr++,*ptr = 8,此時ptr指向第三個元素8,所以輸出全為8.
2、程式設計風格
if('a' = a)
a++;
if(a == 'a')
a++;
第一種寫法更好一些。如果把「==」誤寫做「=」,因為編譯器不允許對常量賦值,就可以檢查到錯誤
3、
%08x為整型以16進製制方式輸出的格式字串,會把後續對應引數的整型數字,以16進製制輸出。08的含義為,輸出的16進製制值佔8位,不足部分左側補0。4、型別轉換
設 unsigned int a = 0xfffffff7;
對於語句char* b = (char*)&a中a本身為乙個uint型別的值,把它的位址賦給乙個執行char型別資料的指標。char型別的長度只有乙個位元組,列印char型別的指標指向的值會是多少?
&a的結果是乙個指標,它的型別取決於a的型別,此處&a的型別應該是:
unsigned int *;
char *b = (char *)&a;
上面等價於:
unsigned int *p = &a; //p中的內容是a的位址,即p指向a
char *b = (char *)p; //此處的強制轉換只是使b也指向a而已
上面的步驟就是將乙個unsigned int 型別的指標強制轉換成乙個char型的指標。
所以請注意:這裡是char型別的指標轉換,而不是char型別的轉換。
p + 1 = x + 1*sizeof(int) = x + 1* 4 = x + 4;
b + 1 =x + 1*sizeof(char) = x + 1*1 = x+1;
因此將乙個unsigned int 型別的指標強制轉換成乙個char型的指標影響的只是指標的定址,一開始都是指向a位址的開頭。
所以printf("%08x",*b); 得到的是fffffff7
response一些小細節
1 response 向客戶機輸出資料。2 位元組流 outputstream 可以輸出任何的資料,而字元流 writer 只能寫字元資料 3 respone.setheader content type text html charset utf 8 控制瀏覽器,指定編碼是utf 8 上面語句等同...
SQL SERVER 一些小細節
一.計算列的寫法 create table dbo test birthday varchar 8 collate chinese prc ci as not null constraint df tbl account birthday default convert char 8 getdate...
C 一些小細節
一 class 類 與 inlcude 類.h 的區別 class 類的使用,只是宣告有這麼乙個類,但是沒辦法呼叫類裡面的函式 而 include則可以 例如 pragma once include cocos2d.h include class scenemanger using ns cc cl...