void update(char array[]){
int i,j;
for(i = 0;i<NUM_OF_SUBARRAYS;i++){
char *subarray = array+(SUBARRAY_SIZE*i);
for(j = 0;j<SUBARRAY_SIZE;j++){
subarray[j]='d';
}
//print_array(subarray);
}
}
问题:将数组划分为NUM_OF_SUBARRAYS
并使它们全部用单个过程程序中的&#34; d
&#34; s更改原始数组(。 ..然后在多进程程序中比较结果)
所以,这是我在单个流程程序中首次尝试解决这个问题。如果我这样做,是不是真的效率低,因为每个子阵列都足够长?
例如,
ARRAY_SIZE=10
NUM_OF_SUBARRAYS=2
现在,每个子阵列都有10个元素但实际上只有2个。考虑到期望的ARRAY_SIZE
是5M,这不是一个问题吗?如果是的话,我该怎么办?我有点迷失在这里,所以如果你能简单地向我解释一下,我会很感激。
答案 0 :(得分:0)
我想你的意思是SUBARRAY_SIZE
而不是ARRAY_SIZE
。
你的意思是2 足够,因为只有d
和\0
作为不同的元素。嗯,这不是练习的重点。可能更多的是通过数组来处理指针算法。
我们的想法是将数组分成将终止字符放在需要的地方,然后将其初始化。这正是你在尝试中所缺少的。
这是一种方式:
#include <stdio.h>
#define NUM_OF_SUBARRAYS 2
#define SUBARRAY_SIZE 10
void update(char array[])
{
int i,j;
for(i = 0; i < NUM_OF_SUBARRAYS; i++) {
char *subarray = array + (SUBARRAY_SIZE*i);
for(j = 0; j < SUBARRAY_SIZE; j++){
subarray[j]='d';
}
subarray[SUBARRAY_SIZE] = '\0'; /* POINT OF THE EXERCISE */
printf("%d. %s", i, subarray);
}
}
int main(void)
{
char arr[21];
update(arr);
return 0;
}
如果你没有终止它,无法至少可以在以后打印出来。 s
中的格式说明符printf
完全搜索\0
以停止。请记住,当它未声明为数组时,您需要为指针动态分配内存,然后检查它。对于subarray
,不,因为它使用array
地址作为基础。