【发布时间】:2015-04-08 23:24:57
【问题描述】:
我通过这个程序来查找结构的长度而不使用 sizeof。我有一些我找不到答案的问题。
我无法理解这一步
(char*)(p+1)-(char*)p)- 为什么将指针类型转换为 char。我打印出每种数据类型的大小。因此,结构的大小应该是 3* int 的大小 + float 的大小 + char 的大小 = 17。但是,结构的大小是 20。请解释一下。
为什么
(float*)(p+1)-(float*)p)的输出是 5。
代码:
#include<stdio.h>
struct sample
{
int a,b;
float c;
char z;
int k;
};
void main()
{
struct sample *p;
struct sample x;
printf("size of struct w/o using sizeof: %d\n", (char*)(p+1)-(char*)p);
printf("size of struct w/o using sizeof: %d\n", (float*)(p+1)-(float*)p);
printf("size of struct using sizeof: %d\n", sizeof(struct sample));
printf(" %d %d %d %d\n", sizeof(char), sizeof(int), sizeof(float), sizeof(x));
}
输出:
不使用 sizeof 的结构大小:20
不使用 sizeof 的结构大小:5
使用 sizeof 的结构大小:20
1 4 4 20
4) 感谢您的回答。我还有一个疑问。
代码
struct sample
{
int a,b;
float c;
char z;
int k;
char s;
};
填充后,这个结构的大小将是 24 字节。为什么在 float (float)((float*)(p+1)-(float*)p) 中打印它不会给出 5.8000 而不是 6。
【问题讨论】:
-
对于 1 和 3:你对
p+1的理解是什么?sizeof(char)是什么?sizeof(float)是什么? -
提示:对于问题 2,请参考结构填充。
-
5 因为大小是 5 个浮点数(5 x 4 字节)
-
不是。它被类型转换为 pointer 到 char。
标签: c pointers type-conversion