Как присвоить каждому элементу в массиве значение 0

#c #arrays #pointers

#c #массивы #указатели

Вопрос:

Я изучаю C , и одним из моих практических упражнений является использование указателей для присвоения всем элементам в массиве значения 0. Я понятия не имею, как это сделать, увеличив указатель на следующую позицию в массиве, поскольку в моем журнале IDE указано, что сравнение между int и * запрещено. Мне нужен только небольшой фрагмент в качестве примера, чтобы помочь мне лучше понять, где я ошибаюсь. Созданный мной массив имеет тип int и имеет единственное измерение с 5 элементами, состоящими из 1,2,3,4 и 5.

Комментарии:

1. На самом деле, используя «for (i=0; i< 5; i ) array[i] = 0», вы увеличиваете указатель

2. Для лучшего объяснения ознакомьтесь с этой ссылкой

3. пока у меня есть int arr [5] = {1,2,3,4,5}; int *ptr = arr; while (*ptr < arr){ ptr = 0; ptr; }

4. memset? (Он действительно использует указатели)

Ответ №1:

 int array[5] = {1, 2, 3, 4, 5};

for(int *i = amp;array[0], *end = amp;array[5]; i != end; i  )
    *i = 0;
  

Код создает указатель на начало amp;array[0] и указатель на одну позицию после конца amp;array[5]
Затем он перемещает указатель по массиву, устанавливая каждому элементу значение ноль. Более продвинутая концепция, которая очень похожа, — это итераторы.

Комментарии:

1. Можно также использовать calloc для инициализации элементов массива значением 0. Смотрите справочную страницу Calloc.

2. Я действительно подумал про себя, что использование цикла while было немного неправильным. Я не мог понять, как я буду создавать его в цикле for, хотя я был уверен, что в какой-то момент мне понадобится ссылка, но я еще не полностью понимаю синтаксис должным образом для вещей, в которых я тоже новичок. спасибо за ответ.

3. @user3806887: Цикл while также будет работать нормально. Ваш исходный код в вашем комментарии был довольно близок, но вам нужно было бы изменить его на: int arr[5] = {1, 2, 3, 4, 5}; int *ptr = arr; int *end = arr 5; while (ptr < end) { *ptr = 0; ptr; }

Ответ №2:

Вы могли бы использовать std::fill,http://en.cppreference.com/w/cpp/algorithm/fill , следующим образом.

 const size_t dataSize = 10;
int data[dataSize];
std::fill(data, data   dataSize, 0);