Форум программистов, компьютерный форум CyberForum.ru

Передача указателя на элемент массива в функцию - C++

Восстановить пароль Регистрация
 
BalexD
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 16
12.06.2014, 14:13     Передача указателя на элемент массива в функцию #1
Добрых времени суток)
Есть массив, самый обычный. Нужно передвинуть влево все значения, кроме последнего (ибо мусор нам не нужен). Т.е. если был массив {0,1,2,3}, то должен стать {1,2,3,3}. При этом все махинации нужно проводить с указателями. И вот тут-то возникло пару вопросов.

Собственно, непонятки именно с указателями. (см. код ниже) Если мы передаем адресс &а[6], но в функции прописываем *а, то передается ведь значение первого элемента, т.к. имя массива=адресс первого элемента => значение первого элемента? Как правильно записать именно такую передачу?(

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
#include <iostream>
using namespace std;
 
void less_12_1(int*, int []); //объявляем нашу функцию (int [] эквивалентно int*, насколько понимаю)
int a[6]={0,1,2,3,4,5}; //создаем массив
int *pa=&a[1];  //начинаем не с первого элемента, так что берём адрес второго (т.е. двигаемся с 1)
 
int main()
{
    bool flag=true; 
    int n;  
    while(flag)
    {
        system("clear");
        cout<<"1\t3\t\n2\t4 Exit\n"<<endl;
        cin>>n;
        system("clear");
        switch(n)
        {
            case 1: less_12_1(pa, &a[6]);break; // тут упаковываем адрес первого нужного элемента и последнего
            
            //case 2: less_12_2(); break;
            //case 3: less_12_3(); break;
 
            case 4: flag=false; break;
        }
    }
    return 0;
}
 
void less_12_1(int pa,int *a) // вот тут очень смущает *а, т.к. это, по идее, ссылка на первый элемент. 
{
    for (; pa!=&a[6]; pa++) // тут я хочу повторять цикл до тех пор, пока адрес ра не совпадет с адресом a[6],
                 //но получаю: ISO C++ forbids comparison between pointer and integer [-fpermissive] 
    {
        pa=(pa+1); 
        cout<<pa;
    }
}
И насчет for (; pa!=&a[6]; pa++) . Почему нельзя сравнивать? Ведь техничесики, что там адрес, что там. И указатель типа int, и массив типа int. В чем подвох?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 14:13     Передача указателя на элемент массива в функцию
Посмотрите здесь:

Передача указателя на метод в функцию C++
C++ Передача указателя на функцию
Передача указателя в функцию C++
Передача в функцию указателя C++
C++ Передача указателя в функцию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jewbacabra
1794 / 1509 / 542
Регистрация: 24.04.2014
Сообщений: 4,249
12.06.2014, 14:28     Передача указателя на элемент массива в функцию #2
Цитата Сообщение от BalexD Посмотреть сообщение
И насчет for (; pa!=&a[6]; pa++) . Почему нельзя сравнивать? Ведь техничесики, что там адрес, что там. И указатель типа int, и массив типа int. В чем подвох?
подвох в том что там не указатель на int, а int
Цитата Сообщение от BalexD Посмотреть сообщение
C
1
void less_12_1(int pa,int *a)
Добавлено через 1 минуту
Цитата Сообщение от BalexD Посмотреть сообщение
pa=(pa+1);
* * * * cout<<pa;
может так:
C
1
2
*pa = *(pa+1);
cout << *pa;
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.06.2014, 14:30     Передача указателя на элемент массива в функцию #3
Цитата Сообщение от BalexD Посмотреть сообщение
less_12_1
Почему бы человеческие названия не давать программным сущностям?
BalexD
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 16
12.06.2014, 14:35  [ТС]     Передача указателя на элемент массива в функцию #4
Цитата Сообщение от Jewbacabra Посмотреть сообщение
может так:
Код C
1
2
*pa = *(pa+1);
cout << *pa;
Ох, нет. У меня так было -- выдавалась ошибка invalid type argument of unary ‘*’ (have ‘int’). Да икомпилятор тыкает-то именно в сравнение.

Цитата Сообщение от Tulosba Посмотреть сообщение
Почему бы человеческие названия не давать программным сущностям?
Это только кусок домашнего задания. Там 19 уроков -- в каждом по три-четыре задания. Так что это, скорее, из соображений удобств)
Jewbacabra
1794 / 1509 / 542
Регистрация: 24.04.2014
Сообщений: 4,249
12.06.2014, 14:36     Передача указателя на элемент массива в функцию #5
BalexD, еще раз:
Цитата Сообщение от Jewbacabra Посмотреть сообщение
void less_12_1(int pa,int *a)
ничего не замечаешь?
BalexD
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 16
12.06.2014, 14:39  [ТС]     Передача указателя на элемент массива в функцию #6
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Цитата Сообщение от Jewbacabra Посмотреть сообщение
void less_12_1(int pa,int *a)
ничего не замечаешь?
Ну как я поняла, что с int pa все верно. А вот с *а я могу только предположить варианты с &a или просто а. К сожалению, тут вынуждены попросить тыкнуть носом. )
Jewbacabra
1794 / 1509 / 542
Регистрация: 24.04.2014
Сообщений: 4,249
12.06.2014, 14:41     Передача указателя на элемент массива в функцию #7
Цитата Сообщение от BalexD Посмотреть сообщение
Ну как я поняла, что с int pa все верно.
Нет.
сама же пишешь:
Цитата Сообщение от BalexD Посмотреть сообщение
И указатель типа int, и массив типа int
И еще сравни прототип:
C
1
void less_12_1(int*, int []);
И реализацию:
C
1
void less_12_1(int pa,int *a)
И как говориться найди 10 отличий
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.06.2014, 14:41     Передача указателя на элемент массива в функцию #8
Цитата Сообщение от BalexD Посмотреть сообщение
К сожалению, тут вынуждены попросить тыкнуть носом. )
C++
1
2
void less_12_1(int*, int []); // прототип
void less_12_1(int pa,int *a) // реализация
Разницу видим?
Цитата Сообщение от BalexD Посмотреть сообщение
Так что это, скорее, из соображений удобств)
Очень печально, что имена такого вида воспринимаются как удобные.
BalexD
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 16
12.06.2014, 14:46  [ТС]     Передача указателя на элемент массива в функцию #9
Цитата Сообщение от Jewbacabra Посмотреть сообщение
И как говориться найди 10 отличий
Ох, черт! Какая глупая ошибка.Ну, теперь я хотя-бы могу посмотреть, работает ли она так, как я хочу. Спасибо за помощь)

Цитата Сообщение от Tulosba Посмотреть сообщение
Очень печально, что имена такого вида воспринимаются как удобные.
Ну мы ж не уточням, кому именно они должны быть удобны)
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
12.06.2014, 14:56     Передача указателя на элемент массива в функцию #10
Цитата Сообщение от BalexD Посмотреть сообщение
Ну мы ж не уточням, кому именно они должны быть удобны)
Они должны быть удобны для того, кто использует код. А так как Вы общаетесь на форум за помощью, то этот код приходится использовать не только Вам.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2014, 15:07     Передача указателя на элемент массива в функцию
Еще ссылки по теме:

C++ Передача указателя на дерево в функцию
Передача ссылки и указателя в функцию C++
Передача указателя в функцию по ссылке C++

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

Или воспользуйтесь поиском по форуму:
BalexD
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 16
12.06.2014, 15:07  [ТС]     Передача указателя на элемент массива в функцию #11
Цитата Сообщение от Tulosba Посмотреть сообщение
Они должны быть удобны для того, кто использует код. А так как Вы общаетесь на форум за помощью, то этот код приходится использовать не только Вам.
Мне показалось необязательным переименовывать одну-единственную функцию на весь код.) Но учту и это.
Yandex
Объявления
12.06.2014, 15:07     Передача указателя на элемент массива в функцию
Ответ Создать тему
Опции темы

Текущее время: 14:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru