#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);