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

Объясните, пожалуйста, как работает передача переменных при вызове функций? - C++

Восстановить пароль Регистрация
 
~B~
 Аватар для ~B~
6 / 6 / 0
Регистрация: 12.06.2011
Сообщений: 80
11.01.2013, 17:02     Объясните, пожалуйста, как работает передача переменных при вызове функций? #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio.h>
using namespace std;
 
void z(int *a,int lenght){
     int *p;
     for (p=a;p<a+(lenght-1);p++){
         cin >> *p;
         
         }
     }
int main ()
{
    setlocale(0,"");
    int size=10;
    int a[size];
    z(a,sizeof(a)/sizeof(a[0]));
    
    getch();
    }
Не могли бы вы разъяснить как работает передача переменных при вызове? То есть конкретно:
C++
1
void z(int *a,int lenght)
как тут передаются параметры? Меня интересует именно указатель.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
11.01.2013, 17:06     Объясните, пожалуйста, как работает передача переменных при вызове функций? #2
в а передается адрес на первый элемент массива a[size]
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
11.01.2013, 17:06     Объясните, пожалуйста, как работает передача переменных при вызове функций? #3
Цитата Сообщение от ~B~ Посмотреть сообщение
как тут передаются параметры?
Передается копия переменной-указателя. Так как значение переменной-указателя - адрес, передается копия адреса. А а и хранит адрес начала массива.
Ласковая Киса
 Аватар для Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
11.01.2013, 17:09     Объясните, пожалуйста, как работает передача переменных при вызове функций? #4
& или операция адресации, — унарная операция, которая возвращает
адрес своего операнда. Например, если имеются объявления
C++
1
2
int у = 5; 
int *yPtr;
то оператор
C++
1
yPtr = &у;
присваивает адрес переменной у указателю yPtr.
Операция * возвращает значение объекта, на который указывает
ее операнд (т.е. указатель). Например, оператор
C++
1
cout << *yPtr << endl;
печатает значение переменной у, а именно 5. Использование * указанным
способом называется разыменованием указателя.
~B~
 Аватар для ~B~
6 / 6 / 0
Регистрация: 12.06.2011
Сообщений: 80
11.01.2013, 17:46  [ТС]     Объясните, пожалуйста, как работает передача переменных при вызове функций? #5
C++
1
*a=&a[0][0]
то есть при вызове функции у меня выполняется вот эта операция?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11837 / 6816 / 771
Регистрация: 27.09.2012
Сообщений: 16,908
Записей в блоге: 2
Завершенные тесты: 1
11.01.2013, 17:47     Объясните, пожалуйста, как работает передача переменных при вызове функций? #6
Скорее уж
C++
1
a=arr;//a=a, просто чтобы не запутаться
Ласковая Киса
 Аватар для Ласковая Киса
82 / 8 / 1
Регистрация: 11.01.2013
Сообщений: 55
11.01.2013, 17:51     Объясните, пожалуйста, как работает передача переменных при вызове функций? #7
Цитата Сообщение от ~B~ Посмотреть сообщение
C++
1
*a=&a[0][0]
то есть вот эта операция выполняется?
Нет.Вы разименовали переменную а и вписали в эту переменную адрес переменной а;
Получилось примерно так:
[цифра,которая была вписана в переменную а]=[адрес переменной а]
8=0xfff4

Операции & и * используют так:

C++
1
2
3
4
int a ; //a - целое число 
int *aPtr; // aPtr - указатель на целое число(адрес)
a = 7; //переменная а теперь равна 7
aPtr = &a; // aPtr устанавливается равным адресу а
После операций получаем:
C++
1
&a==aPtr
([адрес переменной а]==[указатель в котором хранится адрес переменной а после aPtr = &a]

C++
1
2
cout << "Значение а: " << a << endl 
<< "Значение *aPtr: " << *aPtr << endl << endl;
(Операцией * мы "пошли" по адресу который хранился в переменной aPtr и вывели содержимое ячейки памяти на екран)
Выводит:
Значение а: 7
Значение *aPtr: 7
~B~
 Аватар для ~B~
6 / 6 / 0
Регистрация: 12.06.2011
Сообщений: 80
11.01.2013, 19:53  [ТС]     Объясните, пожалуйста, как работает передача переменных при вызове функций? #8
да нееет, меня именно процедура передачи параметров в функцию интересует
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio.h>
using namespace std;
 
void z(int *a,int lenght){
     int *p;
     for (p=a;p<a+(lenght-1);p++){
         cin >> *p;
         
         }
     }
int main ()
{
    setlocale(0,"");
    int size=10;
    int a[size];
    z(a,sizeof(a)/sizeof(a[0]));
    
    getch();
    }
вот почему например здесь мы не пишем при вызове
C++
1
z(&a,sizeof(a)/sizeof(a[0]));
?
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
11.01.2013, 19:59     Объясните, пожалуйста, как работает передача переменных при вызове функций? #9
Потому что это будет адрес-переменной, которая хранит нужный тебе адрес, что логично. Но ты можешь написать и &a, это не ошибка синтаксиса. Только работать будет не так, как ты хочешь.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 20:21     Объясните, пожалуйста, как работает передача переменных при вызове функций?
Еще ссылки по теме:

C++ Объясните пожалуйста, как работает код. Указатели
Пожалуйста, объясните как использовать потоки C++
C++ Класс - Ошибки при вызове методов: В вызове функции отсутствует список аргументов

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,048
11.01.2013, 20:21     Объясните, пожалуйста, как работает передача переменных при вызове функций? #10
грубо можно объяснить так
массив{1 2 3 } лежит допустим по адресу 100
100 -1 101 - 2 102 -3
переменная a лежит по адресу 200 и содержит 100(адрес начала массива)
и если сделать так
C++
1
int *b=a;
то в b будет лежать 100( скопируется из а)
а если написать так
C++
1
int *b=&a;
то в b будет лежать 200(адрес а)
если нужно взять адрес элемента то делается так

адрес 0(первого) элемента
C++
1
int *b=&a[0];
адрес 2(третьего элемента)
C++
1
int * b=&a[2];
Yandex
Объявления
11.01.2013, 20:21     Объясните, пожалуйста, как работает передача переменных при вызове функций?
Ответ Создать тему
Опции темы

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