C C 學習筆記 01 題目

2021-10-23 07:04:16 字數 3316 閱讀 4885

知識點抄筆記

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