一些小細節

2022-01-16 20:35:26 字數 1195 閱讀 2633

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...