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