Как мне суммировать все элементы, на которые указывает указатель, используя цикл while

#c

#c

Вопрос:

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

 (int*)malloc(sizeof(array));
int pointer_sum(int count, int* array){
    while (count > 0) {

    }
}
  

Мне нужно использовать арифметику указателя, чтобы суммировать все элементы, на которые указывает мой указатель.

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

1. Это не то, как вы используете malloc .

2. Мне не нужно выделять память для указателя?

3. Это должно было быть сделано до вызова функции. Вы выделяете память ( malloc ) для array , заполняете целыми числами столько, сколько count в array[0] array[count-1] , и вызываете функцию, подобную int resu< result = pointer_sum(count, array) .

Ответ №1:

Вы знаете начальную точку (указатель!) последовательности целых чисел, и вы знаете длину последовательности с вашей переменной count . Затем вы можете использовать указатель так, как если бы это был допустимый массив.

 int pointer_sum(int count, int* array){
    int i, sum = 0;
    for(i = 0; i < count;   i) {
        sum  = array[i];
    }
    return sum;
}
  

Если вы не собираетесь использовать for цикл, вы должны знать, что каждый for цикл легко преобразуется в while цикл.

 int pointer_sum(int count, int* array){
    int i, sum;

    i = 0;
    sum = 0;
    while(i < count) {
        sum  = array[i];
          i;
    }
    return sum;
}
  

Если вам действительно нужно использовать арифметику указателей, вы должны знать, что вы можете думать, a[i] работает как *(a i) .

 int pointer_sum(int count, int* array){
    int i, sum;

    i = 0;
    sum = 0;
    while(i < count) {
        sum  = *(array i);
          i;
    }
    return sum;
}
  

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

1. Для меня это имеет смысл, но я не понимаю, как это сделать с помощью цикла while. Когда мы закончим проходить наш тест через пару недель, нам не разрешат использовать цикл for в этой ситуации.

2. хорошо. Я думал, вам нужно каким-то образом сравнить количество с самим массивом внутри параметра while.

3. Проверьте редактирование. И для использования malloc (хотя это еще одна проблема, помимо основного вопроса), я думаю, вы могли бы захотеть еще раз взглянуть на примеры из вашего учебника или немного погуглить.

4. Большое спасибо за вашу помощь. Я знаю, что это был глупый вопрос, но я думал, что указатели нужно сравнивать каким-то другим способом. Еще раз спасибо!

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

Ответ №2:

Конечно, похоже, что первый параметр — это размер переданного вами массива, а второй — указатель на этот массив? Предполагая, что это правда, ваш код будет выглядеть примерно так:

 int result = 0;
for(int i = 0; i < count;   i)
{
    result  = array[i];
}
return resu<