将数组分成c中的子数组

时间:2016-03-26 09:39:24

标签: c arrays pointers

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,这不是一个问题吗?如果是的话,我该怎么办?我有点迷失在这里,所以如果你能简单地向我解释一下,我会很感激。

1 个答案:

答案 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地址作为基础。