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;
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 10:34:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 10:34:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 10:34:02       62 阅读
  4. Python语言-面向对象

    2024-07-19 10:34:02       72 阅读

热门阅读

  1. shell处理用户输入——移动参数

    2024-07-19 10:34:02       21 阅读
  2. Github 2024-07-18 开源项目日报Top10

    2024-07-19 10:34:02       20 阅读
  3. React Router 6笔记

    2024-07-19 10:34:02       19 阅读
  4. dnd-kit for react: modern and light drag

    2024-07-19 10:34:02       21 阅读
  5. 模板方法设计模式

    2024-07-19 10:34:02       21 阅读
  6. 如何查询Oracle数据库一周内每天的SQL执行次数

    2024-07-19 10:34:02       17 阅读
  7. 小程序为什么要做分包处理

    2024-07-19 10:34:02       20 阅读
  8. C++ Primer:4.3 逻辑和关系运算符

    2024-07-19 10:34:02       22 阅读
  9. 【Android】Intent基础用法及作用

    2024-07-19 10:34:02       18 阅读
  10. WPF项目实战视频《一》(主要为WPF基础知识)

    2024-07-19 10:34:02       24 阅读