struct指针操作

C L*_*ner 0 c struct

使用的代码

#include<stdio.h>

struct st
{
 char a;
 short c;
 int b;
};

struct st s1;
int main()
{
        printf("%p %p \n",(&s1.b)-1, &s1);
}
Run Code Online (Sandbox Code Playgroud)

如果我打印&s1.b它的地址打印0x804a01c&s1.b-2打印0x804a018 为什么它打印相同的地址,0x804a01c如果我选择&s1.b-1

Ste*_*sop 7

您的打印代码可能有问题.

#include <stdio.h>

struct st
{
 char a;
 short c;
 int b;
};

struct st s1;

int main() {
    printf("%p\n", (void*)(&s1.b));
    printf("%p\n", (void*)(&s1.b - 1));
    printf("%p\n", (void*)(&s1.b - 2));
}
Run Code Online (Sandbox Code Playgroud)

输出:

0x403024
0x403020
0x40301c
Run Code Online (Sandbox Code Playgroud)

  • @C Learner:为什么会这么重要? (3认同)
  • @C Learner:将`s1`声明为全局不会改变行为(指针算法定义非常清晰,并且规范中没有任何部分允许特定于实现的细节在此处进行干预). (2认同)