Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2013, 13:34   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию передача параметра в функцию по двойному указателю

Привет!

Код:
#include <iostream>
using namespace std;

int OpenFile(FILE **file, char *path, char *mode) {
	fopen_s(file, path, mode);
	if (file==NULL)
		return 0;
	else return 1;
}

void ReadFromFile(FILE *file, char *str) {
	char ch;
	int i;
	i=0;
	while ((ch=getc(file))!=EOF) {
			str[i]=ch;
			i++;
		}
		str[i]='\0';
}

void main() {
	int i;
	char ch;
	FILE *file=NULL;
	char path_to_file[100];
	char str[100];
	char mode[]={'r', 't', '\0'};
	cout << "Path: ";
	gets_s(path_to_file);
	if (OpenFile(&file, path_to_file, mode)==1) {
		i=0;
		ReadFromFile(file, str);
		cout << "Reading Success: " << endl;
		puts(str);
		}
	else cout << "Fail";
	system("pause");
}
Почему в функцию передаем адрес (OpenFile(&file, path_to_file, mode)), а в функции ничего не разыменовываем?
Igor95 вне форума Ответить с цитированием
Старый 03.03.2013, 13:39   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Почему в функцию передаем адрес (OpenFile(&file, path_to_file, mode)), а в функции ничего не разыменовываем?

потому что функция fopen_s принимает двойной указатель на FILE
тот, кто делал тебе код, очевидно об этом в курсе (((:
Rififi вне форума Ответить с цитированием
Старый 03.03.2013, 13:40   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Если функция требует объект, мы кормим ей объект
Если функция требует указатель, мы кормим её указатель.
Если функция требует указатель указателя, мы кормим ей указатель указателя

Что требует данная функция?

Код:
errno_t fopen_s( 
   FILE** pFile,
   const char *filename,
   const char *mode 
);
_Bers вне форума Ответить с цитированием
Старый 03.03.2013, 13:48   #4
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Указателя на указатель на файл...
Указателя на имя файла
указателя на режим.

Но я не понимаю, почему передаем адрес...
Igor95 вне форума Ответить с цитированием
Старый 03.03.2013, 13:51   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

требуем двойной указатль, а передаем адрес, почему?
Igor95 вне форума Ответить с цитированием
Старый 03.03.2013, 13:53   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

требуем двойной указатль, а передаем адрес, почему?

К преподу пока не ходи... пара вопросов, и видно что "малчег поплыл"
или ты уже от него?(((:

почитай что такое оператор взятия адреса "&"
Rififi вне форума Ответить с цитированием
Старый 03.03.2013, 14:05   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
#include <iostream>
using namespace std;

// Function argument is pointer to type int
int square( int *n ) {
   return (*n) * (*n);
}

int main() {
   int mynum = 5;
   cout << square( &mynum ) << endl;   // pass address of int
Т.е если функция требует указатель, то можно ей передать адрес того, на что указывать... и в функции для работы со значением, находящимся в ячейке с этим адресом, требуется операция разыменования...
Igor95 вне форума Ответить с цитированием
Старый 03.03.2013, 19:33   #8
Кудаив
Пользователь
 
Регистрация: 19.04.2012
Сообщений: 57
По умолчанию

всё верно, в С++ ты работаешь с двумя атрибутами какой либо, любой переменной - адрес и значение. Получается ты передаёшь в функцию адрес своей переменной и в функции создаётся указатель который указывает на твою переменную ну и работаешь с ним как с обычным указателем
Кудаив вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача параметра в функцию DLL Larboss Общие вопросы Delphi 10 25.08.2012 21:27
Передача хранимой процедуры в качестве параметра в функцию xabik БД в Delphi 5 04.08.2011 11:08
Передача массива по указателю liver1981 Общие вопросы C/C++ 3 21.04.2009 17:07
Передача данных в функцию по указателю Игорь007 Общие вопросы C/C++ 2 23.06.2008 20:17
Передача компонента как параметра в функцию hayhay Microsoft Office Excel 1 11.03.2008 15:53