添加时结构地址的不恒定差异
Inconstant difference in address of Struct when adding
我正在处理一个内存,我在分配的块中使用这个 header。我正在尝试指向 return 个新区域的指针算法。
这是一个简单的问题。当我将 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;
}
输出
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
增加了8个字节。
您正在查看十六进制数。 8+8 = 10(十六进制)。
一个值ptr+x
,其中ptr
是T*
类型,x
是一个整数,确实增加了x*sizeof(T)
.
我正在处理一个内存,我在分配的块中使用这个 header。我正在尝试指向 return 个新区域的指针算法。 这是一个简单的问题。当我将 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;
}
输出
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
增加了8个字节。 您正在查看十六进制数。 8+8 = 10(十六进制)。
一个值ptr+x
,其中ptr
是T*
类型,x
是一个整数,确实增加了x*sizeof(T)
.