添加时Struct的地址不一致

TRE*_*MOR -3 c ubuntu struct pointers

我正在处理一个内存,我在分配的块中使用此标头.我正在尝试使用指针算法来返回新区域.这是一个简单的问题.当我将1,2,3添加到整数地址时,编译器会带来下一个第一个,第二个,第三个整数的地址,它们都会因sizeof(int)而异.但是在这段代码中,一个结构的大小为8.而地址的变化是2和8.下面是代码,输出得到:

#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;
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Cyg*_*sX1 5

它增加了8个字节.您正在查看十六进制数字.8 + 8 =十六进制10.

的值ptr+x,其中ptr是式的T*x是整数,确实通过增加x*sizeof(T).