结构和指针取消引用问题

Structures and Pointers dereferencing question

指针MyStruct* ps指向&s。 在不访问 MyStruct 的任何结构成员的情况下取消引用 only *ps 后的值是多少?

#include    <stdio.h>

typedef struct {
    char c;
    int x;
    double d;
} MyStruct;

int main(void) {
    MyStruct s = {'a', 132, 456.789};
    MyStruct* ps = &s;
    
    printf("Member c has a value of %c\n",(*ps).c);
    printf("Member x has a value of %d\n", (*ps).x);
    printf("Member d has a value of %f\n", (*ps).d);    

    /* printf("Here i want to print the outcome of\n", *ps); */
}

编辑:我终于找到了解决方案!我知道它包含什么价值。这是字符'a'。使用 printf("%c\n", *ps 我得到了 *ps 中的值。我知道我收到了警告,但我现在仍然知道它包含什么。评论和其他答案也很有帮助!

定义

MyStruct s = {'a', 132, 456.789};

在内存中创建一个类似于

的块
+---+
| c |
+---+
| x |
+---+
| d |
+---+

然后定义

MyStruct* ps = &s;

修改成这样:

+----+     +---+
| ps | --> | c |
+----+     +---+
           | x |
           +---+
           | d |
           +---+

ps 的“值”是s 结构对象的第一个成员的地址。

*ps表示整个结构。 *ps 的“值”是其所有成员值的集合。 C 标准不提供任何方式来打印它,但您可以将它分配给另一个相同类型的结构,将它传递给接受该类型参数的函数,然后 return 它来自具有以下参数的函数该类型的 return 类型。实际上,*pss.

相同

一种思考方式是

 MyStruct* ps;

相同
 MyStruct *ps;

其中表示:“*ps”是 'MyStruct'