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/