c error: ‘*scan’ is a pointer; did you mean to use ‘->’?

此错误容易出现在**指针访问时,解决方法是使用()括起来,原因主要是类型不匹配。

#include <stdio.h>
#include <stdlib.h>

struct ac{
    int data;
    struct ac *next;
};

void address(struct ac *p)
{
    struct ac *next, **scan;
    struct ac pa;

    pa.data = 10;
    pa.next = &pa;

    next = p->next;
    scan = &p->next;

    printf("pa = %p\n", &pa);
    printf("pa.a = %p\n", &pa.data);
    printf("pa.next = %p\n\n", &pa.next);

    printf("next = %p\n", next);        // 一级指针指向地址 p->next
    printf("scan = %p\n", scan);        // 一级指针地址     &p->next
    printf("*scan = %p\n\n", *scan);    // 一级指针指向地址 p->next

    printf("p->next = %p\n", p->next);                  // 一级指针指向地址 p->next
    printf("p->next->next = %p\n", p->next->next);      // 一级指针指向地址 p->next->next
    printf("p->next->next->next = %p\n\n", p->next->next->next);      // 一级指针指向地址 p->next->next->next

    printf("&p->next->next = %p\n", &p->next->next);        // 一级指针地址
    printf("&(p->next)->next = %p\n", &(p->next)->next);    // 一级指针地址
    printf("&(p->next->next) = %p\n\n", &(p->next->next));  // 一级指针地址

    printf("(*scan)->next = %p\n\n", (*scan)->next);    // 一级指针指向地址 p->next->next
    //printf("*scan->next = %p\n", *scan->next);        // error: ‘*scan’ is a pointer; did you mean to use ‘->’?
    //printf("scan->next = %p\n", scan->next);          // error: ‘*scan’ is a pointer; did you mean to
use ‘->’?

    if ((*scan)->next == next) {
        printf("ditto\n\n");
    }

    p->next->next = &pa;
    printf("next = %p\n", next);        // 一级指针指向地址 p->next
    printf("scan = %p\n", scan);        // 一级指针地址     &p->next
    printf("*scan = %p\n", *scan);      // 一级指针指向地址 p->next
    printf("(*scan)->next = %p\n", (*scan)->next);      // 一级指针指向地址 p->next->next
    //printf("*scan->next = %p\n", *scan->next);        // error: ‘*scan’ is a pointer; did you mean to use ‘->’?
    printf("p->next->next = %p\n", p->next->next);      // 一级指针指向地址 p->next->next
}

int main()
{
    struct ac p;

    p.data = 10;
    p.next = &p;

    printf("p = %p\n", &p);
    printf("p.a = %p\n", &p.data);
    printf("p.next = %p\n\n", &p.next);
    address(&p);

    return 0;
}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值