结构和指针取消引用问题
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 类型。实际上,*ps
与 s
.
相同
一种思考方式是
MyStruct* ps;
与
相同
MyStruct *ps;
其中表示:“*ps”是 'MyStruct'
指针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 类型。实际上,*ps
与 s
.
一种思考方式是
MyStruct* ps;
与
相同 MyStruct *ps;
其中表示:“*ps”是 'MyStruct'