Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108

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

05.07.2016, 14:29. Показов 850. Ответов 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
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
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
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
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
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru