2015-04-19 60 views
-3

我正在處理分配塊中使用此頭的內存。我正在嘗試使用指針算術來返回新的區域。 這是一個簡單的問題。當我將1,2,3添加到整數地址時,編譯器會帶來下一個第一個,第二個,第三個整數地址,並且它們都按sizeof(int)變化。 但是在這個碼的結構是大小爲8和地址的變化替換地由2和8赫雷什一個代碼,與輸出我得到:添加時struct的地址不一致差異

#include <stdio.h> 
#include <stdlib.h> 

typedef struct header { 
int size; 
int magic; 
}header; 

int main() { 

int n = 10; 
printf("size of int %d\n", sizeof(n)); 
printf("addr %p\n", &n); 
printf("addr+1 %p\n", &n+1); 
printf("addr+2 %p\n", &n+2); 
printf("addr+3 %p\n", &n+3); 

header *h = malloc(sizeof(header)); 
printf("size of header %d\n", sizeof(header)); 
printf("addr %p\n", h); 
printf("addr+1 %p\n", h+1); 
printf("addr+2 %p\n", h+2); 
printf("addr+3 %p\n", h+3); 


return 0; 
} 

OUTPUT

size of int 4 
addr 0xbfeb7898 
addr+1 0xbfeb789c 
addr+2 0xbfeb78a0 
addr+3 0xbfeb78a4 

size of header 8 
addr 0x8706008 
addr+1 0x8706010 
addr+2 0x8706018 
addr+3 0x8706020 
+1

您的計算器必須打破。 – juanchopanza

回答

5

它增加由8個字節。 您正在查看十六進制數字。 8 + 8 = 10(十六進制)。

ptr+x其中ptrT*x類型是一個整數,並確實通過x*sizeof(T)增加。

+0

該死的。謝謝 – TREMOR