我搜索了很多,但找不到任何与此相关的主题。我的问题是:结构变量是指针吗?如果每个输入都存储在结构体成员的地址中,那么结构体变量有什么用呢?
这是我用于检查结构变量的代码,当我打印变量中存储的内容时,它给了我另一个地址,但我无法弄清楚该地址的用途。
这是我的代码及其输出:
struct test
{
int a;
int b;
char c;
};
int main()
{
struct test f;
printf("%u", &f);
printf("\n%d", f);
printf("\n%u", &f.a);
printf("\n%u", &f.b);
}
Run Code Online (Sandbox Code Playgroud)
输出:
6487616
6487600
6487616
6487620
简短的回答:不。
长版本:上述程序中的所有打印语句都会调用未定义的行为,因为提供的参数与转换说明符不匹配。
详细地说,要打印指针,您需要使用转换说明符,并将参数%p强制转换为 to 。void *
结构变量没有通用(一一对应)格式说明符。您需要选择具有相应格式说明符的单个成员(或成员的成员),并将其作为参数传递。
也就是说,关于第一个成员和访问权限,
[...] 指向结构对象的指针,经过适当转换后,指向其初始成员(或者如果该成员是位字段,则指向它所在的单元),反之亦然。[...]