Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
7 / 5 / 2
Регистрация: 21.01.2020
Сообщений: 29

динамический массив, указатель

21.01.2020, 19:48. Показов 1458. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
почему нельзя указатель ссылать на другой массив в функции?

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
#include <iostream>
#include "auxfunction.h"
 
using namespace std;
 
typedef unsigned char uChar;
 
void foo(uChar *a)
{
    uChar *temp;
    uChar *b = new uChar[3];
    b[0] = 'a';
    b[1] = 'b';
    b[2] = 'c';
 
    temp = a;
    a = b;
    b = temp;
 
    delete [] b;
 
}
 
int main()
{
    uChar *a = new uChar[3];
 
    a[0] = '1';
    a[1] = '2';
    a[2] = '3';
 
    foo(a);
    
 
 
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.01.2020, 19:48
Ответы с готовыми решениями:

Динамический массив и указатель на указатель
Спасибо за внимание) Задача такова: нужно удалить элемент по индексу, при этом уменьшить сам массив на 1 (т.е. удалили элемент - уменьшился...

Написать функцию принимающую массив и возвращающую указатель на динамический массив
Написать функцию принимающую массив и возвращающую указатель на динамический массив содержащий первые n нaибольших чисел. Как сделать...

Динамический массив и указатель
Всем привет. Пытаюсь понять тему динамических массивов. Прошу помочь разобраться в следующем: Есть код (пример): int num = 5;...

8
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
21.01.2020, 19:50
Цитата Сообщение от came_L Посмотреть сообщение
почему нельзя указатель ссылать на другой массив в функции?
пример
0
7 / 5 / 2
Регистрация: 21.01.2020
Сообщений: 29
21.01.2020, 19:56  [ТС]
Я хочу чтобы в функции указатель a ссылался на массив b...но выходя из функции массив как-будто стирается, но ведь это динамичесий массив. Он должен жить вне функции
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
21.01.2020, 19:58
Меняем void foo(uChar *a) на void foo(uChar* &a) и ничего не стирается. За подробностями в учебник по C++, ключевые слова: передача аргумента функции по значению, по указателю, по ссылке.
0
7 / 5 / 2
Регистрация: 21.01.2020
Сообщений: 29
21.01.2020, 20:03  [ТС]
типа я создаю массив, в функции я указателем меняю местами два массива, и я ожидаю что массив a становится массивом b

Добавлено через 2 минуты
но если я сделаю ссылку то их уже местами не поменяешь...ссылка навечно прикреплена к одному элементу
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
21.01.2020, 20:06
Цитата Сообщение от came_L Посмотреть сообщение
я ожидаю что массив a становится массивом b
Внутри функции - да. Если отбросить указатели и упростить пример, получим что-то вроде этого:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
void foo(int a) {
    a = 2;
}
 
int main() {
    int a = 1;
    foo(a);
    cout << a << endl;
}
Что будет выведено программой? Почему?

Цитата Сообщение от came_L Посмотреть сообщение
но если я сделаю ссылку то их уже местами не поменяешь...ссылка навечно прикреплена к одному элементу
Никто Вам и не предлагает делать ссылку. Создать переменную ссылочного типа и передать аргумент функции по ссылке - это немного разные вещи.
0
7 / 5 / 2
Регистрация: 21.01.2020
Сообщений: 29
21.01.2020, 20:11  [ТС]
да я понимаю что передача по значению копирует переменную, и внутри функции я работаю с другой переменной и никак не влияет на внешнюю функцию main////

я ведь передаю по указателю, по указателю я ведь явно должен работать с переменной и при выходе значении должны сохраняться
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
21.01.2020, 20:27
Лучший ответ Сообщение было отмечено came_L как решение

Решение

Цитата Сообщение от came_L Посмотреть сообщение
по указателю я ведь явно должен работать с переменной
Главное здесь - с переменной. Если внутри функции написать *a = <новое значение переменной>;, то будет меняться значение переменной. А у Вас написано a = b;, т.е. изменяется сам указатель, а не переменная, на которую он указывает. Сам указатель здесь является тоже переменной. Если нужно менять именно его, то потребуется еще один указатель на указатель (что несколько громоздко), или передача аргумента по ссылке (что немного проще).

Если Вы поняли, почему не работает приведенный выше пример с int, тогда попробуйте разобраться, почему не работает и ваша программа. Немного изменю ее, чтобы была больше похожа на вариант с int:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using p_char = char*;
void foo(p_char a)
{
    char *temp;
    char *b = new char[3];
    b[0] = 'a';
    b[1] = 'b';
    b[2] = 'c';
 
    temp = a;
    a = b;
    b = temp;
 
    delete [] b;
}
1
7 / 5 / 2
Регистрация: 21.01.2020
Сообщений: 29
21.01.2020, 20:36  [ТС]
получается значение указателей тоже копируются, и выходя из функции адреса остаются старые,
но если мы будем менять значение передавая указатель , то значение изменяются

внутри значения меняются
а адреса нельзя так изменить

Добавлено через 7 минут
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2020, 20:36
Помогаю со студенческими работами здесь

Указатель на динамический массив
Как сделать указатель на размер двухмерного динамического массива? Пробовал int *size_ptr = size, при условии, что size - константный...

Указатель на двухмерный динамический массив
Друзья, нужна Ваша помощь! Создаю одномерный динамический, создаю указатель на него (вернее на его первый эл-т). То же самое пытаюсь...

Умный указатель и динамический массив
Здравствуйте! Есть проблема со следующим заданием. Есть класс умного указателя, используя его необходимо, создать каталог товаров (+ 2...

Классы, указатель на динамический массив
Здравствуйте, Подскажите пожалуйста, в чем моя ошибка, у меня есть класс Треугольник, на основании его мне нужно создать так...

Нужно сделать указатель на динамический двумерний массив
Есть динамический массив, псевдо-код: #include &lt;iostream&gt; using namespace std; const int x = 10; int main() { ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru