aCCB->C16_ArgInfo(aCCB->InstHdl,2,&tType2,&tOpt2,&tLen2,NULL,&tCount2);

if (tType2 == _TypeAlpha &&
    tOpt2  == (_ArgOptVAR | _ArgOptARRAY))
{
    /* read array */
    tBuf = static_cast<char*>(malloc(tLen2));
    aCCB->C16_ArgRead(aCCB->InstHdl,2,0,tBuf);

    tTab  = static_cast<char**>(malloc(sizeof(char*) * tCount2));
    tSize = tLen2 / tCount2;
    *tTab = tBuf;

    /* define sort table */
    for (tLoop = 1; tLoop < tCount2; ++tLoop)
        tTab[tLoop] = tTab[tLoop-1] + tSize;


我的理解是aCCB-> InstHdl包含一些原始数据,这些原始数据已转换为字符串数组(char **)。

我不明白的是最后一个循环。它有什么作用?这是为了什么我必须承认我的C ++知识不存在...

最佳答案

它遍历数组,分配上一迭代的值加上tSize。这是什么意思,为什么?我应该怎么知道?

我不会因为无法理解该代码而对自己太苛刻。这很难读。

编辑:

天啊。只需阅读OP的评论之一,然后再看一些。此代码太可怕了!!!

这似乎正在发生的事情:
将数组读入tBuf。
然后创建一个数组数组来保存tCount2数组。
然后将tSize初始化为tLen2 / tCount2,这基本上创建了tCount2项...您将看到。

然后,将tBuf指针分配给tTab“数组数组”中的第一个元素。

现在,for循环.. for循环基本上将系列中的第一个元素分割开,并在每个tLen2 / tCount2段将点提供到主tBuf中。

你得到的是...

[0] [1] [2] [3] [4]
 |   |   |   |   |
 v   v   v   v   v
|datadatadatadatadata|


啊!!!

不,它不会导致任何未定义或未指定的行为。这真的很丑。

关于c++ - 有人可以向我解释此代码吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4306236/

10-12 20:50