Замена элементов массива с помощью ссылки на указатель в C

#c

#c

Вопрос:

Я хочу заменить элемент массива другими значениями по ссылке. Но при этом я сталкиваюсь с проблемой. Мой код приведен ниже. В приведенном ниже коде я получаю только последнее значение, равное 10, после передачи по ссылке. Но я хочу получить измененное значение, например, 6,7,8,9,10. Пожалуйста, предложите:

 #include <iostream>

using namespace std;

 int temp=6;
 int byreference (int *x){
   for (int t=0;t<5;t  ){
     *x=temp t;     
   }
}



int main ()
{   
    int array[5];

    for (int s=0;s<5;s  ){
        array[s]=s 1;
        byreference(amp;array[s]);
        cout<<*amp;array[s]<<endl;
    }

}
  

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

1. Если вы используете c , почему бы не использовать std::vector<int> ?

2. Используя приведенный выше код, у меня нет никаких проблем с созданием массива. Проблема, с которой я сталкиваюсь, заключается в замене значений. Он показывает только последнее значение из функции, которое равно 10. Но я хочу показать 6,7,8,9,10

3. зачем использовать loop in byreference ? будут видны только последние изменения, почему другие?

4. Да, но вам все равно следует подумать об изменении, я имею в виду *amp;array[s] , это ужасный способ написания кода.

5. да, отбросьте * и просто используйте array [s]

Ответ №1:

Без вектора:

 #include <iostream>

using namespace std;

int temp=6;
int byreference (int *x){
for (int t=0;t<5;t  ){
    *(x t)=temp t;     
}
}

int main ()
{   
    int array[5];

    for (int s=0;s<5;s  ){
        array[s]=s 1;
        byreference (array);
        cout<<array[s]<<endl;
    }

}
  

вывод:

 6
7
8
9
10
  

Ответ №2:

Вам было бы намного лучше использовать типы stl, если вы собираетесь использовать c :

 #include <vector>
#include <iostream>
using namespace std;

const int temp=6;
int byreference (std::vector<int> amp;x){
    for (int t = 0; t<x.size(); t  ){
        x[t] = temp   t;  
    }
}

int main ()
{   
    std::vector<int> array(5, 0);

    for (int s = 0; s < array.size(); s  ) {
        array[s]=s 1;
        byreference(array);
        cout << array[s] << endl;
    }
}
  

вывод:

 6
7
8
9
10
  

Таким образом, вы избегаете таких проблем, как перебегание концов ваших массивов.

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

1. Получаем следующие ошибки: $$ В функции ‘int по ссылке (std::vector<int>amp;) $$ошибка: нет совпадения для ‘operator *’ в ‘* x’

Ответ №3:

Эта строка

 *x=temp t;  
  

убедитесь, что все значения в array заданы 10 равными .

Почему?

temp имеет значение 6 и не изменяется в программе.

В цикле,

 for (int t=0;t<5;t  )
{
    *x=temp t;  
}
  

*x устанавливается и сбрасывается до тех пор, пока t=4 . Затем он останавливается. В то время *x = 6 4 = 10 .

Если вы хотите, чтобы массив имел 6, 7, 8, ... , вы можете изменить byreference на:

 void byreference (int *x)
{
    *x  = temp-1;
}