#include <stdio.h>
struct Student {
int id;
char name[20];
};
int main() {
struct Student stu;
struct Student *ptr = &stu;
ptr->id = 101;
strcpy(ptr->name, "John Doe");
printf("Student ID: %d\n", ptr->id);
printf("Student Name: %s\n", ptr->name);
// explain the below code
printf("%d\n", (void *)ptr);
printf("%d\n", &stu);
printf("%d\n", *ptr);
return 0;
}
解释一下我注释过的代码中的指针部分。
并且还请解释一下(void*)
:我很困惑为什么ptr
和*ptr
具有相同的内存。
最佳答案
ptr
是引用 struct stu
的指针。
&
是“地址”运算符。 stu
的地址与 ptr
指向的指针相同。
*
是间接(“对象指向的”)运算符。 *ptr
实际上是 stu
。正如您所看到的,从技术上讲,您可以使用 %d
将其打印为整数,但这样做没有什么意义。它不会(或者至少不应该)打印与 ptr 相同的值。参见,例如:
https://onlinegdb.com/3DmUu2ftv
关于c - 请解释一下这背后的概念,(c 编程中的 ptr 和 *ptr)之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77465371/