泫溯 2024-06-01 17:03 采纳率: 94.7%
浏览 2
已结题

请问这个this指针类型不是指针呢

img


请问这个this指针类型不是指针呢?
this不就是作为指针使用的吗?疑惑了

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-01 17:03
    关注

    引自免费微信小程序:皆我百晓生

    在 C 语言中,this 是一个特殊的内置关键字,它并不是一个标准类型的指针,但在概念上可以被视作指向当前对象的隐含指针。当你在类的方法(在 C 中通常称为结构体的成员函数)中使用 this 关键字时,它实际上是指向调用该方法的对象的地址。

    在你提供的例子中,A.A(int a, int b) 是一个名为 A 的结构体的构造函数(尽管在 C 语言中没有正式的构造函数概念,但可以通过这种方式实现类似的功能)。这里的 this 指针指向正在初始化的新对象实例。由于 A.A() 方法是在处理 A 类型的对象,所以 this 的类型应该是 A *,即指向 A 结构体类型的指针。

    因此,在选择题中,正确答案 C 表示的是 A 类型,这实际上是错误的描述,因为正确的类型应该是 A *。不过,如果题目意图是要表达 this 在上下文中代表的是对当前对象的引用,那么从语义上说,选项 D(可能是打字错误,应该是 A*)更接近正确答案。

    如果你想要在 C 语言中创建一个类似于类的结构体,并使用类似 this 的指针,可以这样编写:

    #include <stdio.h>
    
    typedef struct {
        int x;
        int y;
    } A;
    
    void A_init(A *self, int a, int b) {
        self->x = a;
        self->y = b;
    }
    
    int main() {
        A obj;
        A_init(&obj, 5, 7);
        
        printf("obj.x: %d, obj.y: %d\n", obj.x, obj.y);
    
        return 0;
    }
    

    在这个例子中,我们使用了一个名为 A_init 的函数来初始化 A 结构体,参数 self 就相当于 this,它是一个指向 A 结构体的指针。我们在 main 函数中通过 &obj 获得 obj 的地址并传递给 A_init 函数,从而达到类似使用 this 的效果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月9日
  • 已采纳回答 6月1日
  • 创建了问题 6月1日