【发布时间】:2017-01-17 04:59:23
【问题描述】:
我有一个功能
struct Analysis reduce (int n, void* results)
其中 n 是要分析的文件数,我将一个分析结构数组传递给结果。
Analysis 结构体定义如下:
struct Analysis {
int ascii[128]; //frequency of ascii characters in the file
int lineLength; //longest line in the file
int lineNum; //line number of longest line
char* filename;
}
我已经将 void * 转换成这样,
struct Analysis resArray[n];
struct Analysis* ptr = results;
resArray[0] = ptr[0];
但我不知道如何正确地遍历 resArray。我试过了
for (i = 0; i < n; i++){
printf("lineLength: %d\n", resArray[i].lineLength);
}
n = 3,我得到垃圾值。 resArray[0] 是正确的,但是 resArray[1] 是一个非常高的数字,而 resArray[2] 只是 0。为什么 resArray[1] 或 resArray[2] 不能给出正确的值?如果我错误地增加了地址,那将是有意义的,但我只是在某个索引处访问数组。在这里迷路了!
【问题讨论】:
-
试试
ptr[i]而不是resArray[i]。 -
使用
resArray[0] = ptr[0];,您将results的第一个元素复制到resArray的第一个元素中。其他值未初始化。 -
Why wouldn't resArray[1] or resArray[2] give the correct values- 因为没有对这些元素执行分配?你对resArray[0] = ptr[0];所做的只是拉出第一个元素。该数组中的其他所有内容都是 indeterminate 的。但是..为什么首先将它们塞入另一个数组中。只使用ptr[i].linelength有什么问题? -
你应该和Patrick聊天;他还询问通过
void *访问struct Analysis。 -
你为什么用
void*?
标签: c arrays struct iteration void-pointers