为什么使用双重间接?或者为什么使用指向指针的指针?

2023-12-31

什么时候应该在 C 中使用双重间接寻址?谁能用例子解释一下吗?

我所知道的是,双重间接是指向指针的指针。为什么我需要一个指向指针的指针?


如果你想要一个字符列表(一个单词),你可以使用char *word

如果你想要一个单词列表(一个句子),你可以使用char **sentence

如果你想要一个句子列表(独白),你可以使用char ***monologue

如果您想要独白列表(传记),您可以使用char ****biography

如果您想要传记列表(生物图书馆),您可以使用char *****biolibrary

如果你想要一个生物库列表(哈哈),你可以使用char ******lol

... ...

yes, I know these might not be the best data structures


非常非常非常无聊的用法示例lol

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

int wordsinsentence(char **x) {
    int w = 0;
    while (*x) {
        w += 1;
        x++;
    }
    return w;
}

int wordsinmono(char ***x) {
    int w = 0;
    while (*x) {
        w += wordsinsentence(*x);
        x++;
    }
    return w;
}

int wordsinbio(char ****x) {
    int w = 0;
    while (*x) {
        w += wordsinmono(*x);
        x++;
    }
    return w;
}

int wordsinlib(char *****x) {
    int w = 0;
    while (*x) {
        w += wordsinbio(*x);
        x++;
    }
    return w;
}

int wordsinlol(char ******x) {
    int w = 0;
    while (*x) {
        w += wordsinlib(*x);
        x++;
    }
    return w;
}

int main(void) {
    char *word;
    char **sentence;
    char ***monologue;
    char ****biography;
    char *****biolibrary;
    char ******lol;

    //fill data structure
    word = malloc(4 * sizeof *word); // assume it worked
    strcpy(word, "foo");

    sentence = malloc(4 * sizeof *sentence); // assume it worked
    sentence[0] = word;
    sentence[1] = word;
    sentence[2] = word;
    sentence[3] = NULL;

    monologue = malloc(4 * sizeof *monologue); // assume it worked
    monologue[0] = sentence;
    monologue[1] = sentence;
    monologue[2] = sentence;
    monologue[3] = NULL;

    biography = malloc(4 * sizeof *biography); // assume it worked
    biography[0] = monologue;
    biography[1] = monologue;
    biography[2] = monologue;
    biography[3] = NULL;

    biolibrary = malloc(4 * sizeof *biolibrary); // assume it worked
    biolibrary[0] = biography;
    biolibrary[1] = biography;
    biolibrary[2] = biography;
    biolibrary[3] = NULL;

    lol = malloc(4 * sizeof *lol); // assume it worked
    lol[0] = biolibrary;
    lol[1] = biolibrary;
    lol[2] = biolibrary;
    lol[3] = NULL;

    printf("total words in my lol: %d\n", wordsinlol(lol));

    free(lol);
    free(biolibrary);
    free(biography);
    free(monologue);
    free(sentence);
    free(word);
}

Output:


total words in my lol: 243  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用双重间接?或者为什么使用指向指针的指针? 的相关文章

随机推荐

  • 模拟 div 覆盖另一个 div 时的颜色变化

    我有一个固定的 div 它可以滚动某些元素 当div位于某个div上方时 我不希望它具有特定的颜色和特定的图像 当它位于另一个 div 上时 我希望它改变颜色 基本现场演示 http jsfiddle net c2a4jg95 8 我很确定
  • VBA打开工作簿,退出代码

    我尝试使用打开 xlsm 类型的工作簿 Private Function readFiles ByVal lv path As String ByRef lx wrkShDes As Worksheet On Error GoTo Erro
  • Perl 6 有无限的 Int 吗?

    我有一个任务 我想找到距离目标最近的字符串 因此 编辑距离 而不是同时生成它们 我想我应该使用高水位线技术 我猜是低水位线 同时初始化最近的编辑距离Inf这样任何编辑距离都会更近 use Text Levenshtein my string
  • ASP.Net Core Blazor:如何根据标头值加载不同的 _Host.cshtml 文件

    我想加载一个 Host cshtml基于请求中的标头的 ASP NET Core Blazor 项目 服务器端 Blazor 中的文件 例如 客户端连接到example com并被重定向到 Host cshtml特定于租户 A 的文件 另一
  • 在Python中关闭窗口并打开文本编辑器时保持脚本运行[重复]

    这个问题在这里已经有答案了 众所周知 愚人节即将到来 所以我想我应该写一个很好的脚本来恶作剧某人 这是众所周知且令人恐惧的 MEMZ 病毒的无害版本 我目前拥有的脚本 import webbrowser import time def pr
  • AngularJS 幻灯片过渡在 Safari ios 9 上损坏

    我有以下 css 类 用于在路线更改开始时左右滑动我的 ng view 这些在大多数浏览器 手机等上都工作得很好 直到现在 在ios 9下动画不太工作 它不再从左到右滑动 但视图在滑动时从小尺寸增长到全尺寸 效果相当不愉快 欢迎任何帮助 C
  • 如何创建按月份分组的年度条形图

    我在尝试使用 和 创建条形图时遇到了困难DataFrame按年份和月份分组 使用以下代码 我尝试在创建的图像中绘制数据 而不是返回第二个图像 我还尝试将图例移至右侧并将其值更改为相应的月份 我开始感受到通过groupby命令 虽然没有得到我
  • 如何抑制“缺乏具体实施”的警告?

    我该怎么做才能防止编译器抛出以下警告 缺少 setter MyClass field 和 getter 的具体实现 我的班级 field 在下面的代码上 import package mock mock dart class MyClass
  • Django IntegrityError - NOT NULL 约束失败

    我遇到的错误表明我正在尝试提交一个必填字段为空的表单 Error django db utils IntegrityError NOT NULL constraint failed bug report bug project id 我的代
  • C# 枚举 - 如何比较值

    我如何比较这个枚举的值 public enum AccountType Retailer 1 Customer 2 Manager 3 Employee 4 我试图在 MVC4 控制器中比较此枚举的值 如下所示 if userProfile
  • 如何避免多次 if null 检查[重复]

    这个问题在这里已经有答案了 可能的重复 Deep Null 检查 有更好的方法吗 https stackoverflow com questions 2080647 deep null checking is there a better
  • laravel Rest api 中的身份验证和用户管理

    我正在为移动应用程序编写一个 REST API 我不知道如何在我的应用程序中对用户和管理员进行身份验证 我有一张名为 users 并且有一个名为 的字段isAdmin 那是0 or 1 现在当管理员发送帖子时 用户可以看到帖子 您如何推荐a
  • 在android中创建从上到下到状态栏和工具栏的线性渐变

    I want to add a Linear gradient color to Status Bar and Toolbar I am able to add gradient to status bar and toolbar with
  • 通过使用不同条件运行相同查询创建多个平面文件

    我的数据库表中有 1000 万个客户号码 我想每次为前 100 万客户运行查询并将该数据保存在 csv 文件中 我如何使用 SSIS 包做到这一点 前任 第一次 选择名字 姓氏 客户 ID 来自客户 其中客户 ID 介于 1 到 1 000
  • Spring 3 简单的无扩展 url 映射与基于注释的映射 - 不可能吗?

    我正在使用 Spring 3 并尝试使用注释来定义控制器映射来设置一个简单的 Web 应用程序 如果不使用 form 或 do 填充所有网址 这似乎非常困难 由于网站的部分内容需要密码保护 因此这些网址均位于 secure 下 有一个
  • 按时间间隔创建月平均值

    抱歉 如果这已经发布了 但我真的很努力 找不到任何东西 我从事每月温度观测工作已有 30 年 从 1960 年 1 月到 1989 年 12 月 它看起来像这样 gt head df date temp 1 1960 01 01 22 92
  • Bootstrap:手风琴不会自动折叠之前打开的面板

    我需要创建一个引导手风琴 下面的标记工作正常 但它不会自动折叠先前打开的元素 例如 打开 panel1 然后单击 panel2 然后 panel1 应该自动关闭 但事实并非如此 我尝试从引导站点 http twitter github co
  • java.lang.VerifyError:在分支目标 73 处期望堆栈图帧

    我使用jdk 1 7 jekins maven 当我构建项目时 单元测试失败 错误是 java lang VerifyError 在分支目标 73 处期望堆栈图帧 异常详细信息 位置 com DataDictDao save Lcom Da
  • 有没有办法在nodejs中停止执行异步系列的下一个函数?

    async map list function object callback async series function callback console log 1 var booltest false assuming some lo
  • 为什么使用双重间接?或者为什么使用指向指针的指针?

    什么时候应该在 C 中使用双重间接寻址 谁能用例子解释一下吗 我所知道的是 双重间接是指向指针的指针 为什么我需要一个指向指针的指针 如果你想要一个字符列表 一个单词 你可以使用char word 如果你想要一个单词列表 一个句子 你可以使