делить массив на подмассивы в c

Вопрос:void update(char array[]){ int i,j; for(i = 0;i

Вопрос: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 и сделайте все, чтобы они меняли исходный массив с помощью ” d ” s в одной программе обработки (… затем в многопроцессной программе и сравнивали результаты)

Итак, это моя первая попытка решить это в одной программе процесса. если я делаю это так, разве это неэффективно, так как каждый суб-массив длиннее, чем достаточно?

Например,

ARRAY_SIZE=10 NUM_OF_SUBARRAYS=2

теперь каждый суб-массив имеет 10 элементов, но на самом деле 2 достаточно. Разве это не проблема с учетом желаемого ARRAY_SIZE 5M? если это так, что мне делать? Я как бы потерялся здесь, поэтому я был бы признателен, если бы вы коротко объяснили мне это.

Лучший ответ:

Полагаю, вы имели в виду SUBARRAY_SIZE вместо ARRAY_SIZE.

Вы, на ваш взгляд, достаточно 2, потому что в качестве отдельных элементов есть только d и . Ну, это не пункт упражнения. Скорее всего, это связано с арифметикой указателей с помощью массивов.

Идея состоит в том, чтобы разделить массив, как положить завершающий символ там, где он нужен, и просто инициализировать его. Это именно то, чего вам не хватает в вашей попытке.

Вот один из способов:

#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] = ‘’; /* POINT OF THE EXERCISE */ printf(«%d. %s», i, subarray); } } int main(void) { char arr[21]; update(arr); return 0; }

Если вы его не прекратите, невозможно как минимум позже распечатать. Спецификатор формата s в printf ищет точно для остановки. Имейте в виду, что, когда он не объявлен как массив, вам нужно будет динамически выделять память для указателя, а затем проверить его. В случае subarray нет, потому что он использует адрес array качестве базы.

Оцените статью
Добавить комментарий