指针引用与间接寻址:如何正确设置函数中的指针变量
问题解决:指针间接寻址的正确写法
首先明确核心逻辑:你传入的const Node* node本身就已经是指向目标Node对象(也就是a1)的指针,不需要额外取地址操作。你之前的错误在于混淆了「指针变量本身的地址」和「指针指向的对象的地址」。
正确写法分两种场景:
场景1:不需要修改指向的Node对象
直接将参数node赋值给cur即可,保持const限定以符合参数的只读要求:
int loop(const Node* node) { // cur 和 node 指向同一个Node对象(a1的地址),且无法修改该对象 const Node* cur = node; // 后续可以正常访问cur的成员,比如 cur->data ... }
场景2:需要修改指向的Node对象
如果你的逻辑需要修改Node对象的内容,那首先要调整loop函数的参数类型(因为const Node*限定了只读),改为非const指针后直接赋值:
// 调整参数为非const的Node* int loop(Node* node) { Node* cur = node; // 现在可以修改cur指向的对象成员,比如 cur->next = nullptr; ... }
为什么之前的写法错误?
Node* cur = &node这行代码中,&node取的是函数参数node这个指针变量自身在栈上的地址,它的类型是const Node**,赋值给Node*属于类型不匹配,而且逻辑上完全偏离了你想要指向a1的需求。
内容的提问来源于stack exchange,提问作者oliver
相关产品推荐
相关产品推荐

