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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BalexD
0 / 0 / 0
Регистрация: 26.05.2013
Сообщений: 16
#1

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

12.06.2014, 14:13. Просмотров 300. Ответов 10
Метки нет (Все метки)

Добрых времени суток)
Есть массив, самый обычный. Нужно передвинуть влево все значения, кроме последнего (ибо мусор нам не нужен). Т.е. если был массив {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. В чем подвох?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jewbacabra
Эксперт PHP
2117 / 1781 / 658
Регистрация: 24.04.2014
Сообщений: 5,124
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
:)
Эксперт С++
4391 / 3234 / 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
Эксперт PHP
2117 / 1781 / 658
Регистрация: 24.04.2014
Сообщений: 5,124
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
Эксперт PHP
2117 / 1781 / 658
Регистрация: 24.04.2014
Сообщений: 5,124
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
:)
Эксперт С++
4391 / 3234 / 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
:)
Эксперт С++
4391 / 3234 / 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++ Передача указателя в функцию
Передача указателя на функцию C++
C++ Передача указателя в функцию по ссылке

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru