c - 请解释一下这背后的概念,(c 编程中的 ptr 和 *ptr)之间的区别

标签 c pointers variables

#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/

相关文章:

c - 替代 LD_PRELOAD 或 LD_LIBRARY_PATH

c - 逐 block 反转文件内容

c++ - 将成员函数指针设置为空闲函数指针

Java 变量阴影方法覆盖概念

c - 如何更新必须经过 3 个函数的指针?

一旦创建了 C 枚举,就可以向它添加值吗?

c - 如何删除用户在 c 中选择的二维数组的 N 行和列数

c++ - 在 shared_ptr 容器中查找元素?

python - Saltstack 变量

docker - docker compose 有没有办法创建交叉服务常量?