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/