任何人都能解释一下这段代码吗?

时间:2010-11-29 17:21:49

标签: c++ arrays pointers

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-&gt; InstHdl包含一些转换为字符串数组(char **)的原始数据。

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

2 个答案:

答案 0 :(得分:4)

循环遍历数组,分配上一次迭代的值加上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|

UGH !!!

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

答案 1 :(得分:0)

乍看之下,循环看起来像tTabtBuf内容的连续子串,每个子串比前一个短tSize。它不会拆分子字符串,只会将索引设置为tBuf

但是在不知道任何C16_*函数的作用的情况下,我无法猜测其余函数。