3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108

Почему не обнуляются элементы массива? (функции, массивы, указатели)

05.07.2016, 14:29. Показов 770. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно сам код.
его действия:
В главной функции tmain выполняется функция innfunc, а функция innfunc вызывает функцию innfunc1.
Вопрос: почему не обнуляются элименты массива? Как поправить чтоб работало?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
void innfunc(int*);
int & innfunc1(int*);
 
int _tmain(int argc, _TCHAR* argv[])
{
    int a[3] = {5,20,10}; //создаем массив из трех элементов 
    innfunc(a); // вызываем функцию
    system ("pause");
    return 0;
}
 
void innfunc(int *b)
{
    int &y = innfunc1(b); //создаем ссылку, на элемент массива, который вернет функция innfunc1
       //создадим цикл который обнуляет наши элементы массива
    do
    {
        y = 0;
        y = innfunc1(b); //обнулили элемент, берем новый
        cout << y << endl;
    } while (y > 0);
}
 
int & innfunc1(int *c)
{
    cout << "c[0] " << c[0] << endl;
    cout << "c[1] " << c[1] << endl;
    cout << "c[2] " << c[2] << endl;
    for (int i = 0;; i++) //цикл вернет элемент который не равен нулю
    {
        if (c[i] > 0)
        {
            return c[i];
            break;
        }
        if (!(c[i + 1] >= 0)) //условие вернет ноль когда все элементы равны нулю
                {
            return c[1];
            break;
                }
    }
}
Пока уходит в бесконечный цикл, т.к. элементы не обнуляются.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.07.2016, 14:29
Ответы с готовыми решениями:

список (в программе обнуляются указатели на структуры)
здравствуйте помогите найти ошибку, при возврате указателя на структуру из функции в функцию майн он обнуляется, это меня сбивает с толку...

Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц)
Для каждого элемента , bij, i= 1,...,n , j=1,...,n определяется свой многоугольник местонахождением соответствующего элемента aij (см....

Указатели на массивы. Указатели и функции
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

7
Модератор
Эксперт С++
 Аватар для zss
13761 / 10957 / 6488
Регистрация: 18.12.2011
Сообщений: 29,219
05.07.2016, 14:59
А почему они должны обнуляться?
Я нигде не вижу чего-нибудь типа c[i]=0;
1
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108
05.07.2016, 15:01  [ТС]
Цитата Сообщение от zss Посмотреть сообщение
А почему они должны обнуляться?
Я нигде не вижу чего-нибудь типа c[i]=0;
y это ссылка на элемент
Вот же:
C++
1
2
3
4
5
6
do
    {
        y = 0;
        y = innfunc1(b); //обнулили элемент, берем новый
        cout << y << endl;
    } while (y > 0);
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
05.07.2016, 15:02
Igorokmen, В строке 19 вы инициализировали ссылку с помощью c[0]. Все. Она всегда связана с c[0]. Поэтому в строке 23 выполняется с[0]=0; а в строке 24: c[0]=innfunc(b). Вы хотите, чтобы y=... в одном случае меняло значение y, а вдругом - объект к которому привязана ссылка? Так не бывает.
Если переписать с помощью указателей, то в одном слусае будет y=... в другом *y=...
2
 Аватар для Хрисипп
19 / 29 / 13
Регистрация: 09.02.2016
Сообщений: 230
05.07.2016, 15:07
Цитата Сообщение от Igorokmen Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
if (c[i] > 0)
{
    return c[i];
    break;
}
if (!(c[i + 1] >= 0)) //условие вернет ноль когда все элементы равны нулю
{
    return c[1];
    break;
}
break не нужен, и так выйдет из цикла
1
4947 / 2287 / 287
Регистрация: 01.03.2013
Сообщений: 5,973
Записей в блоге: 30
05.07.2016, 16:48
Цитата Сообщение от avgoor Посмотреть сообщение
Вы хотите, чтобы y=... в одном случае меняло значение y, а вдругом - объект к которому привязана ссылка? Так не бывает.
Бывает. Но ради этого придется взять например шарп.
1
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108
05.07.2016, 20:21  [ТС]
Но как же сделать так, чтоб забирать у функции innfunc1 элемент массива и обнулять его в innfunc?
0
 Аватар для fire_Rising
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
05.07.2016, 20:42
Igorokmen, работать через указатель, а не через ссылку, т.е.
C++
1
2
3
4
5
6
 
int *y = innfunc1(b);
*y = 0; //обнуляем значение по адресу
 
//Ну и здесь изменить тип возвр значения соответственно 
int *innfunc1(int *c) {}
И еще вопрос, зачем использовать в параметрах указатель?
C++
1
innfunc1(int *c)
Ты как бы (c) все равно никак не меняешь.

Добавлено через 5 минут
Предлагаю просто написать так
C++
1
int *innfunc1(int c);
а вызывать так:
C++
1
int *y = innfunc1(&b);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.07.2016, 20:42
Помогаю со студенческими работами здесь

Указатели и массивы. Указатели и функции
Никак не разберусь с указателями на функцию. Пишу в Visual Studio. Надо написать функцию Compress() с использованием указателей, которая...

Почему, после завершения цикла и заполнения массива, данные в нем обнуляются?
почему после завершения цикла и заполнения массива, данные в нем обнуляются? Дана строка символов, состоящая из цифр от 0 до 9. Найти...

Указатели и массивы: почему заданный код даёт разные результаты?
Почему этот код даёт разные результаты? Что присваивается указателю во втором случае? int main() { char* mass =...

с++: массивы, указатели и функции
Приветствую вас программисты, на вас одна надежда.. Не могу разобраться, как изменить.. делаю в code::blocks Первая и вторая часть...

указатели.функции.массивы.
помогите решить в с++ Array75. Дан массив размера N. Переставить в обратном порядке элементы массива, расположенные между его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru