Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
 Аватар для ~B~
7 / 7 / 1
Регистрация: 12.06.2011
Сообщений: 80

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

11.01.2013, 17:02. Показов 1031. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.01.2013, 17:02
Ответы с готовыми решениями:

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

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

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

9
ComfyMobile
 Аватар для Nixy
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
11.01.2013, 17:06
в а передается адрес на первый элемент массива a[size]
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
11.01.2013, 17:06
Цитата Сообщение от ~B~ Посмотреть сообщение
как тут передаются параметры?
Передается копия переменной-указателя. Так как значение переменной-указателя - адрес, передается копия адреса. А а и хранит адрес начала массива.
0
 Аватар для Ласковая Киса
83 / 9 / 6
Регистрация: 11.01.2013
Сообщений: 55
11.01.2013, 17:09
& или операция адресации, — унарная операция, которая возвращает
адрес своего операнда. Например, если имеются объявления
C++
1
2
int у = 5; 
int *yPtr;
то оператор
C++
1
yPtr = &у;
присваивает адрес переменной у указателю yPtr.
Операция * возвращает значение объекта, на который указывает
ее операнд (т.е. указатель). Например, оператор
C++
1
cout << *yPtr << endl;
печатает значение переменной у, а именно 5. Использование * указанным
способом называется разыменованием указателя.
0
 Аватар для ~B~
7 / 7 / 1
Регистрация: 12.06.2011
Сообщений: 80
11.01.2013, 17:46  [ТС]
C++
1
*a=&a[0][0]
то есть при вызове функции у меня выполняется вот эта операция?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
11.01.2013, 17:47
Скорее уж
C++
1
a=arr;//a=a, просто чтобы не запутаться
0
 Аватар для Ласковая Киса
83 / 9 / 6
Регистрация: 11.01.2013
Сообщений: 55
11.01.2013, 17:51
Цитата Сообщение от ~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~
7 / 7 / 1
Регистрация: 12.06.2011
Сообщений: 80
11.01.2013, 19:53  [ТС]
да нееет, меня именно процедура передачи параметров в функцию интересует
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
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
11.01.2013, 19:59
Потому что это будет адрес-переменной, которая хранит нужный тебе адрес, что логично. Но ты можешь написать и &a, это не ошибка синтаксиса. Только работать будет не так, как ты хочешь.
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
11.01.2013, 20:21
грубо можно объяснить так
массив{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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.01.2013, 20:21
Помогаю со студенческими работами здесь

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

Объясните как работает создание функций
Изучаю Python по книге М. Доусона, все было хорошо и легко, пока не дошел до 6 главы, где идет изучение функций на примере игры 'Крестики...

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

Пожалуйста, объясните как работает программа
как работает? :( var a,b,i:integer; c:integer; f1,f2:text; begin assign(f1,'input.txt'); assign(f2,'output.txt'); reset(f1); ...

Объясните, пожалуйста, как работает прога
DOMAINS list = integer* PREDICATES nondeterm puz(list, list) nondeterm perset(list,list) CLAUSES perset(,):-X&gt;Y. ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru