2017-09-16 44 views
0

C編程,什麼是下面的初始化意味着,的C指針初始化爲數字wqhich的類型是鑄造

char *ptr = (char *) 100; 

是否意味着我們已經在位置100初始化一個名爲ptr到另一個指針指向哪個是一個指針本身。所以,本質上,100也是指針,我們已經設置了指針指針。

+1

'100'本身是一個常數'int'值,它不具有任何特殊含義。它是*表達式*(char *)100',它是指向地址'100'的指針。 –

回答

1

你在想這件事。這意味着ptr是一個指向字符的指針,它指向地址100.地址100處可能有任何內容(或沒有任何內容)。它是實現定義的,如果你嘗試去引用那個指針,這段代碼將會做什麼。

大多數帶有MMU的體系結構都將保留零頁,並確保沒有內存映射到此處。這意味着嘗試讀取或寫入小於頁面大小(通常爲4 KiB,因此爲0x1000)的任何地址都將導致頁面錯誤,並在Linux上導致SIGSEGV。這樣做的目的是幫助捕獲意外的空指針解引用。

+0

謝謝。我做了更具體的。 –

0

該表達式可用於指向內存中特定地址的指針。在託管環境中幾乎不使用,但常用於嵌入式編程。例子:

#define GPIOA    ((GPIO_TypeDef *) GPIOA_BASE) 
#define GPIOB    ((GPIO_TypeDef *) GPIOB_BASE) 
#define GPIOC    ((GPIO_TypeDef *) GPIOC_BASE) 
#define GPIOD    ((GPIO_TypeDef *) GPIOD_BASE) 
#define GPIOE    ((GPIO_TypeDef *) GPIOE_BASE) 

其中:

#define GPIOA_BASE   (0x40010000 + 0x0800) 
#define GPIOB_BASE   (0x40010000 + 0x0C00) 
#define GPIOC_BASE   (0x40010000 + 0x1000) 
#define GPIOD_BASE   (0x40010000 + 0x1400) 
#define GPIOE_BASE   (0x40010000 + 0x1800)