Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
~B~
6 / 6 / 1
Регистрация: 12.06.2011
Сообщений: 80
1

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

11.01.2013, 17:02. Просмотров 453. Ответов 9
Метки нет (Все метки)

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)
как тут передаются параметры? Меня интересует именно указатель.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2013, 17:02
Ответы с готовыми решениями:

Объясните, пожалуйста, как работает фрагмент кода. Почему при i = 0 вводится лишь 2 строки?
Здравствуйте! Объясните, пожалуйста, как происходит ввод строк в этом фрагменте кода. string...

Объясните пожалуйста как работает программа
объясните пожалуйста код с момента появления &quot;bool fl&quot;, как это вообще работает? #include...

Объясните, пожалуйста, как работает программа
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; using namespace std; #include &lt;conio.h&gt; #include...

Объясните пожалуйста как работает программа!!
#include&lt;iostream&gt; #include&lt;cstdlib&gt; using namespace std; int *Create(int n) { ...

Передача переменных при вызове функции между модулями
Здравствуйте. Переводится программа с VCL формой из Delphi в С++. В главное модуле VCL форма, во...

9
Nixy
ComfyMobile
400 / 281 / 34
Регистрация: 24.07.2012
Сообщений: 916
11.01.2013, 17:06 2
в а передается адрес на первый элемент массива a[size]
0
Vourhey
Почетный модератор
6741 / 2423 / 221
Регистрация: 29.07.2006
Сообщений: 13,031
11.01.2013, 17:06 3
Цитата Сообщение от ~B~ Посмотреть сообщение
как тут передаются параметры?
Передается копия переменной-указателя. Так как значение переменной-указателя - адрес, передается копия адреса. А а и хранит адрес начала массива.
0
Ласковая Киса
83 / 9 / 6
Регистрация: 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. Использование * указанным
способом называется разыменованием указателя.
0
11.01.2013, 17:09
~B~
6 / 6 / 1
Регистрация: 12.06.2011
Сообщений: 80
11.01.2013, 17:46  [ТС] 5
C++
1
*a=&a[0][0]
то есть при вызове функции у меня выполняется вот эта операция?
0
Croessmah
++Ͻ
15896 / 9018 / 1734
Регистрация: 27.09.2012
Сообщений: 22,170
Записей в блоге: 2
Завершенные тесты: 2
11.01.2013, 17:47 6
Скорее уж
C++
1
a=arr;//a=a, просто чтобы не запутаться
0
Ласковая Киса
83 / 9 / 6
Регистрация: 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
0
~B~
6 / 6 / 1
Регистрация: 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]));
?
0
Vourhey
Почетный модератор
6741 / 2423 / 221
Регистрация: 29.07.2006
Сообщений: 13,031
11.01.2013, 19:59 9
Потому что это будет адрес-переменной, которая хранит нужный тебе адрес, что логично. Но ты можешь написать и &a, это не ошибка синтаксиса. Только работать будет не так, как ты хочешь.
1
ValeryS
Модератор
7918 / 5893 / 776
Регистрация: 14.02.2011
Сообщений: 20,271
Завершенные тесты: 1
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];
0
11.01.2013, 20:21
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2013, 20:21

Объясните пожалуйста как идет передача
Пишу админку к сайту, пытаюсь разобраться... у меня есть страница с входом - admin.php, после ввода...

Объясните пожалуйста как построить таблицу значений и график функций
Дана функция а я совсем не понимаю как построить таблицу значений и график!Помогите пожалуйста!

Передача данных в ассемблер. Объясните как работает
Здравствуйте. Нужно реализовать метод ньютона с подвижным полюсом с вычислением на ассемблере....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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