知識點抄筆記
1、寫出float x 與「零值」比較的if語句。
if
(x >
0.000001
&& x <
-0.000001
)
2、已知乙個陣列table,用乙個巨集定義,求出資料的元素個數。
#define ntbl (sizeof(table) / sizeof(table[0]))
3、對(-1.2345)取整是多少?4、寫一語句實現x是否為2的若干次冪的判斷。
5、請寫乙個c函式,若處理器是big_endian的,則返回0;若是little_endian的,則返回1
int
checkcpu()
c; c.a =1;
return
(c.b ==1)
;}
剖析:
採用little-endian模式的cpu對運算元的存放方式是從低位元組到高位元組,
而big-endian模式對運算元的存放方式是從高位元組到低位元組。
舉例子:16bit寬的數0x1234
little-endian存放模式:
記憶體位址 存放內容
0x4000
0x34
0x4001
0x12
而big-endian存放模式:
記憶體位址 存放內容
0x4000
0x12
0x4001
0x34
little-endian存放模式:
記憶體位址 存放內容
0x4000
0x78
0x4001
0x56
0x4002
0x34
0x4003
0x12
而big-endian存放模式:
記憶體位址 存放內容
0x4000
0x12
0x4001
0x34
0x4002
0x56
0x4003
0x78
聯合體union的存放順序是所有成員都從低位址開始存放。
*6、有乙個如下的結構體:
struct a;
請問在64位編譯器下用sizeof(struct a)計算出的大小是多少?
解析:
32位編譯器:32位系統下指標占用4位元組
char :1個位元組
char
*(即指標變數):
4個位元組(32位的定址空間是2^32
, 即32個bit,也就是4個位元組。同理64位編譯器)
short
int:
2個位元組
int: 4個位元組
unsigned
int:
4個位元組
float
:4個位元組
double
:8個位元組
long
:4個位元組
long
long
:8個位元組
unsigned
long
:4個位元組
64位編譯器:64位系統下指標占用8位元組
char :1個位元組
char
*(即指標變數)
:8個位元組
short
int:
2個位元組
int: 4個位元組
unsigned
int:
4個位元組
float
:4個位元組
double
:8個位元組
long
:8個位元組
long
long
:8個位元組
unsigned
long
:8個位元組
win64下:long
8位元組、short
2位元組、int
4位元組、int
*8位元組;
c++中記憶體對齊,按最大長度對齊:8
+(2+4+
2(補齊2位元組))+8=
24位元組
備註:主要是了解32位和16位系統各種資料型別所佔的儲存空間
7、寫出嵌入式中經常使用的死迴圈有幾種
while(1
);for(;;
} __loop
goto loop;
8、volatile 的含義,寫出3種使用方式
如果沒有volatile關鍵字,則編譯器可能優化讀取和儲存,可能暫時使用暫存器中的值,如果這個變數由別的程式更新了的話,將出現不一致的現象。
一般說來,volatile用在如下的幾個地方:(1
)、中斷服務程式中修改的供其它程式檢測的變數需要加volatile;(2
)、多工環境下各任務間共享的標誌應該加volatile;(3
)、儲存器對映的硬體暫存器通常也要加volatile說明,因為每次對它的讀寫都可能由不同意義
9、給定一整型變數a寫兩段**:第乙個設定a的bit3,第二個清除a的bit3
#define bit3 (0x1 << 3)
static
int a;
void
set_bit3
(void
)void
clear_bit3
(void
)備註:寫驅動常用到
10、某工程中要設定乙個絕對位址為0x67a9整形變數值為0xaa66,編譯器是純ansi編譯器。
int
*ptr;
ptr =
(int*)
0x67a9
;*ptr =
0xaa55
;備註:掌握函式指標的用法
11、sizeof和strlen的區別?
答案:sizeof是運算子,在編譯時即計算好了; 而strlen是函式,要在執行時才能計算。
還有對字串來說,sizeof包含字串結尾,strlen不包含。
期待下次
keep
C C 筆記 0 題目彙總
1 判斷 x 是小寫字母符的c表示式 if a x z 2 設有定義 char buffer x 將字串 abcd 賦值給buffer的安全解語句是 strcpy buffer,abcd wsprint buffer,abcd char p abcd strcpy buffer,p 錯誤解 char...
C C 易錯難點筆記01
c 是一門神奇的語言,很多時候你對底層不熟悉,很難知道某些情況下的結果,下面是我不斷積累的疑惑點,這裡將其記錄下來。class a class b public a int tmain int argc,tchar argv 下面語句發生什麼變化。b pb b pa 答 不能覆蓋,派生類重寫基類的虛...
C C學習筆記
1.儲存型別 標準c語言為變數 常量 函式定義了4種儲存型別 extern,auto,static,register,它們分別用乙個關鍵字 儲存型別說明符 來說明。這4種儲存型別可分為兩種生存期限 永久的 即整個程式執行期間都存在 extern和static 和臨時的 即暫時儲存在堆疊和暫存器中 a...