C編程,什麼是下面的初始化意味着,的C指針初始化爲數字wqhich的類型是鑄造
char *ptr = (char *) 100;
是否意味着我們已經在位置100
初始化一個名爲ptr
到另一個指針指向哪個是一個指針本身。所以,本質上,100
也是指針,我們已經設置了指針指針。
C編程,什麼是下面的初始化意味着,的C指針初始化爲數字wqhich的類型是鑄造
char *ptr = (char *) 100;
是否意味着我們已經在位置100
初始化一個名爲ptr
到另一個指針指向哪個是一個指針本身。所以,本質上,100
也是指針,我們已經設置了指針指針。
你在想這件事。這意味着ptr
是一個指向字符的指針,它指向地址100.地址100處可能有任何內容(或沒有任何內容)。它是實現定義的,如果你嘗試去引用那個指針,這段代碼將會做什麼。
大多數帶有MMU的體系結構都將保留零頁,並確保沒有內存映射到此處。這意味着嘗試讀取或寫入小於頁面大小(通常爲4 KiB,因此爲0x1000)的任何地址都將導致頁面錯誤,並在Linux上導致SIGSEGV。這樣做的目的是幫助捕獲意外的空指針解引用。
謝謝。我做了更具體的。 –
該表達式可用於指向內存中特定地址的指針。在託管環境中幾乎不使用,但常用於嵌入式編程。例子:
#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)
'100'本身是一個常數'int'值,它不具有任何特殊含義。它是*表達式*(char *)100',它是指向地址'100'的指針。 –