指向不在统一偏移量的结构数组中的连续元素的指针?
Pointers to consecutive elements in an array of structs not at uniform offsets?
这是一个重复的问题,但在任何地方都找不到合适的解释。
我有以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct student_data_boys
{
int roll_b;
char name_b[4];
} student_data_boys;
int main()
{
student_data_boys *ptr;
int i;
int num = 5;
ptr = (student_data_boys *) malloc(num * sizeof(student_data_boys));
if(ptr == NULL)
printf("Can't allocate memory.\n");
exit(1);
}
printf("Allocated memory space size is : %ld bytes.\n",
(num * sizeof(student_data_boys)));
for(i=0;i<num;i++) {
printf("Start address of data1[%d] is : %p.\n", i+1, ptr+i);
}
free(ptr);
}
当我递增结构指针时,预期的下一个地址是基地址加上结构块的大小(此处为 8),但是当我看到输出时,下一个大小与预期不同。
输出结果如下:
Allocated memory space is : 40.
Start address of data1[1] is : 0x55f5097c1010.
Start address of data1[2] is : 0x55f5097c1018.
Start address of data1[3] is : 0x55f5097c1020.
Start address of data1[4] is : 0x55f5097c1028.
Start address of data1[5] is : 0x55f5097c1030.
有人可以解释这种行为吗?
您看到的地址符合您的预期,它们确实相隔 8 个字节。只是 printf 格式字符串中的 %p
导致十六进制表示法(从 0x
前缀可以看出)。因此,例如 0x55f5097c1020 - 0x55f5097c1018 == 8
.
这是一个重复的问题,但在任何地方都找不到合适的解释。
我有以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct student_data_boys
{
int roll_b;
char name_b[4];
} student_data_boys;
int main()
{
student_data_boys *ptr;
int i;
int num = 5;
ptr = (student_data_boys *) malloc(num * sizeof(student_data_boys));
if(ptr == NULL)
printf("Can't allocate memory.\n");
exit(1);
}
printf("Allocated memory space size is : %ld bytes.\n",
(num * sizeof(student_data_boys)));
for(i=0;i<num;i++) {
printf("Start address of data1[%d] is : %p.\n", i+1, ptr+i);
}
free(ptr);
}
当我递增结构指针时,预期的下一个地址是基地址加上结构块的大小(此处为 8),但是当我看到输出时,下一个大小与预期不同。
输出结果如下:
Allocated memory space is : 40.
Start address of data1[1] is : 0x55f5097c1010.
Start address of data1[2] is : 0x55f5097c1018.
Start address of data1[3] is : 0x55f5097c1020.
Start address of data1[4] is : 0x55f5097c1028.
Start address of data1[5] is : 0x55f5097c1030.
有人可以解释这种行为吗?
您看到的地址符合您的预期,它们确实相隔 8 个字节。只是 printf 格式字符串中的 %p
导致十六进制表示法(从 0x
前缀可以看出)。因此,例如 0x55f5097c1020 - 0x55f5097c1018 == 8
.