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

Передача аргументов в функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Пакетное переименование файлов http://www.cyberforum.ru/cpp-beginners/thread601033.html
Задание: Создать папку в ней 10 файлов. Программа от пользователя получает маску, все файлы которые подходят под маску переименовать. Подскажите алгоритм реализации, функции, желательно ссылки.
C++ Подскажите пожалуйста с динамической DLL библиотекой 1. Разработка DLL библиотеки.// MathFuncsDll.h namespace MathFuncs { class MyMathFuncs { public: static __declspec(dllexport) double +(double a, double b); static __declspec(dllexport) double -(double a, double b); static __declspec(dllexport) double *(double a, double b); http://www.cyberforum.ru/cpp-beginners/thread601029.html
Идентификации пользователя в системном реестре C++
Вот начальный код#include "stdafx.h" #include <iostream> #include <conio.h> #include <string.h> #include <stdlib.h> #include <cstdlib> using namespace std; char pass,pass1,k=0;
C++ Вывод на экран слов, начинающихся с гласных букв
Программа должна считывать английский текст из файла и выводить на экран слова, начинающиеся с гласных букв. Программа работает, но при запуске не выводит слова, а лишь прокручивает черное окно. В чем дело? #include "iostream.h" #include "fstream.h" #include "stdio.h" #include "conio.h" int main(){ ifstream fin("text.txt", ios::in | ios::nocreate); if(!fin) { cout << "Oshibka otkritia...
C++ В данной последовательности определить число соседств двух положительных чисел http://www.cyberforum.ru/cpp-beginners/thread601018.html
Дана непустая последовательность различных натуральных чисел, за которой следует 0. В данной последовательности определить число соседств двух положительных чисел.
C++ Выделить из строки с полным путем к файлу само имя файла без расширения String58. Дана строка, содержащая полное имя файла, то есть имя диска, спи-сок каталогов (путь), собственно имя и расширение. Выделить из этой строки имя файла (без расширения). Помогите пожалуйста я не понимаю эти задачи на строки... подробнее

Показать сообщение отдельно
The_Immortal
1548 / 484 / 8
Регистрация: 04.04.2009
Сообщений: 1,891
08.06.2012, 22:18     Передача аргументов в функции
Ребят, никогда раньше не задумывался каким же образом передаются аргументы. Сейчас же дошел до передачи аргументов через указатель и ссылку. И вот зашел в небольшой тупик.

Вот 3 простейших примера передачи аргументов:

а) через указатель:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
void fn(int* pintArg) { //как это понять?
    *pintArg = 10;
}
 
int main(int nNumberofArgs, char* pszArgs[]) {
    int n = 0;
    fn(&n);
    cout << n << endl;
    system("PAUSE");
}
б) по ссылке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
void fn(int& intArg) { //как это понять?
    intArg = 10;
}
 
int main(int nNumberofArgs, char* pszArgs[]) {
    int n = 0;
    fn(n);
    cout << n << endl;
    system("PAUSE");
}
в) "простая" передача аргумента (смысла в данном случае не имеет):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
void fn(int intArg) { //как это понять?
    intArg = 10;
}
 
int main(int nNumberofArgs, char* pszArgs[]) {
    int n = 0;
    fn(n);
    cout << n << endl;
    system("PAUSE");
}
Все три случая просты и понятны. Но мне они понятны лишь на словах, т.к. передачу аргумента я представляю в абстрактном виде.

Хочется же узнать что конкретно происходит (не на словах, а кодом), когда функция получает аргумент во всех 3 случаях.

Я понимаю это так:

а)
C++
1
int* pintArg = &n // где &n - адрес переменной n
б)
C++
1
2
int& intArg = n // где n - адрес переменной n, 
//хотя это не очевидно, т.к. ожидается значение переменной n
в)
C++
1
int intArg = n // где n - значение переменной n
В общем, я слегка разжевал для себя содержимое скобочек у функций.

1) правильно ли я это сделал?
2) насчет "разжевок" под "б" и "в". Все-таки немного не понимаю, почему в случае "б" от n берется адрес, а в случае "в" - значение? Это определяет тип переменной? int& и int соответственно? Хм, они выступают в качестве операторов, что ли? Я просто как думал: есть у нас что-то, что мы собираемся послать в качестве аргумента в функцию. И это что-то при посылке и при попадании в качестве аргумента в функцию не меняется. Т.е. в данном случае что-то это n. У этой переменной есть значение - мы его и посылаем... Правда у этой переменной есть и адрес =/ Ммм, короче опять залез в кашу, которая ни для кого не каша...

Помогите, пожалуйста. Передайте своей логики, плиз, ибо в книгах просто все очевидно: передаем значение в функцию. Если аргумент функции имеет тип ссылки - принимаем адрес, если указатель - принимаем адрес, если просто тип - принимаем значение. Все просто. Но мне бы хотелось как-то иначе бы это понять.

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