kap*_*pil 0 c struct pointers sizeof
我写了一个程序
include<stdio.h>
struct record
{
int i;
char ch[20];
};
int main()
{
struct record a,*b;
b=&a;
printf("intial pointer is %p and final is %p",b++,b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
a的大小应为20 + 4 = 24,但输出为
intial pointer is 0x7fffb0455e40 and final is 0x7fffb0455e58
Run Code Online (Sandbox Code Playgroud)
算术是18个字节.为什么输出是这样的?
算术是18个字节.为什么输出是这样的?
因为它是十六进制的.0x7fffb0455e58
- 0x7fffb0455e40
是0x18
,或24 10,这是您期望的结果.
请注意,您的代码未定义的行为,因为++b
和b
在同一表达式中使用不带序列点把它们分开.您还需要投给准备的价值%p
来void*
,即
printf("initial pointer is %p and final is %p", (void*)b, (void*)(b+1));
Run Code Online (Sandbox Code Playgroud)