【问题标题】:2D array of pointers C二维指针数组 C
【发布时间】:2013-01-02 17:54:16
【问题描述】:

这可能很容易回答,但我似乎无法弄清楚它的语法。我需要的是一个二维数组,第一个元素是指向 CSTRING 的指针,第二个元素是一个计数器。

这样做的目的是根据线程编号将单词列表线程化并传递给线程。就像它被定义为 char wordlists[100][10] 之类的东西(每个线程 100 个单词和 10 个列表 1 个总共 10 个)我最初可以用文件中的单词填充所有列表,然后将特定列表传递给要处理的线程,一旦线程加入主线程,我将重新填充与加入线程相关的单词列表并用新单词重新启动线程。

总的来说,我没有得到制作二维指针数组的语法(第一个元素指针第二个只是一个计数器)。也可以只传递特定线程的单词开始的数组地址,所以我不需要传递 1000 个单词的整个 2D 数组吗? (这样我就可以传递存储 100 个字的线程的起始地址)

感谢您的帮助!

edit:: 如果你们对通过线程处理大字文件的类似方法有更好的建议,那么建议他们接受更多想法。

【问题讨论】:

  • 您是否尝试跨线程对阵列进行分区?原始表定义可能会对您的问题有所帮助,因为我认为这不会像您最初想象的那么复杂。
  • @WhozCraig 是的,我正在尝试创建 10 个 100 个单词的列表,并为每个线程提供 1 个列表,并在他们加入主线程时重新填充他们的列表并重新启动它们,直到单词文件被完全阅读.
  • 好的。您尝试拆分并发送到线程的来源是否来自更大(更重要的是,完整)列表?
  • 我停在第一段。如果需要 CString 和计数器,请使用结构。
  • @WhozCraig 是的,主要列表是位于硬盘驱动器上的文件,根据我选择的文件包含 300、000 或更多单词。

标签: c arrays multithreading


【解决方案1】:

我不明白制作二维指针数组的语法

* 的优先级低于[]。因此 wordlists 是一个指向 char 的指针数组。

char *wordlists[100][10];

【讨论】:

    【解决方案2】:

    声明一个二维指针数组(键入T):

    T *array[width][height];
    

    是否也可以只传递数组地址 [...] 这样我就不需要传递 1000 个字的整个二维数组?

    你甚至不能做任何其他事情。在 C 中,数组总是按指针传递,而不是按值传递。

    【讨论】:

      【解决方案3】:

      您可能会受益于阅读comp.lang.c FAQ 的(相关部分,但我会推荐全部)。

      对于任何接触 C(和类似 C 的语言)的人来说,这可能是必读的,而且它令人难以置信地大开眼界(尤其是关于未定义语句的行为、空指针的值和使用,以及在你的情况下,指针和数组指针)。

      【讨论】:

        猜你喜欢
        • 2017-04-26
        • 2017-06-11
        • 1970-01-01
        • 2016-05-08
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多