Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

передача параметров по ссылке в функцию на C (не С++)

3.3K
11 ноября 2009 года
eugrita
24 / / 26.02.2006
Я путем тестирования (ни в каких руководствах не нашел), что передаче параметров по адресам в функцию в языке C типа some_function(&some_variable); не проходит!!!, хотя работать с адресами в операторах типа
int k;float X=10; k=&X; - можно!!!
во вложении файл swap.c простейшей функции перестановки - она под C++ идет, под C - нет.
Файл тестировался в среде C++Builder консольные приложения под С
Так ли это!!!

#include
void swap_values(float *a, float *b)
{
float temp;
temp = *a; *a = *b;
*b = temp;
}
void main(void)
{
float big = 10000.0; float small = 0.00001;
swap_values(&big, &small);
cout << "Big содержит " << big << endl;
cout << "Small содержит " << small << endl;
}
12K
11 ноября 2009 года
Ghox
297 / / 26.07.2009
Цитата: eugrita
Я путем тестирования (ни в каких руководствах не нашел), что передаче параметров по адресам в функцию в языке C типа some_function(&some_variable); не проходит!!!, хотя работать с адресами в операторах типа
int k;float X=10; k=&X; - можно!!!
во вложении файл swap.c простейшей функции перестановки - она под C++ идет, под C - нет.


Как вы определили что под C++ идет а под C - нет? Программа не компилится, или работает неправильно? Как я сам думаю, должно быть первое - программа не должна закомпилиться, но не потому что передача параметров по адресам в C не работает (она там работает на самом деле), а потому что у вас в программе используется поток вывода cout, который из библиотеки iostream, которая для C++ вообще-то. Если вам нужен вывод на экран, то нужно вместо cout printf из stdio.h использовать.
Переделал ваш пример под C:

Код:
#include <stdio.h>

void swap_values(float *a, float *b)
{
    float temp;
    temp = *a; *a = *b;
    *b = temp;
}

void main()
{
    float big = 10000.0;
    float small = 0.00001;
    swap_values(&big, &small);
    printf("Big contains %f\n", big);
    printf("Small contains %f\n", small);
}

У меня всё прекрасно работает (правда, я не в Builder, а в Visual Studio пробовал).
P.S. Да, если мой пример поможет, то можете в качестве благодарности стишок подкинуть :) (лучше в личку, а то модераторы суровые).
3
11 ноября 2009 года
Green
4.8K / / 20.01.2000
Цитата: eugrita

Я путем тестирования (ни в каких руководствах не нашел), что передаче параметров по адресам в функцию в языке C типа some_function(&some_variable); не проходит!!!,


Для начала, читайте литературу! С определениями полная каша!
"по адресам" - это "указатель" имеется в виду?

И что, ты хочешь сказать, что в C функция не может принимать указатель?

НУ ЧТО ЗА БРЕД!!!

Читай книги, а не учись вслепую "путем тестирования".

Цитата: eugrita

хотя работать с адресами в операторах типа


В C нет операторов.

Цитата: eugrita

во вложении файл swap.c простейшей функции перестановки - она под C++ идет, под C - нет.


Куда идет? Куда ты её послал, а она не пошла?
Формулируй мысли правлильно, а для этого (ещё раз повторяю) прочти любую книгу по C/C++.

P.S. Тема закрыта как идиотская. Все возражения принимаются в личку.

87
11 ноября 2009 года
Kogrom
2.7K / / 02.02.2008
Что-то я не пойму. Ну, то что у автора темы в примере передача по указателю, а не по ссылке - это ещё понятно. Но Ghox чего-то бдительность потерял.

Нет в C передачи параметров по ссылке, если говорить в терминологии C++. Только по значению или с помощью указателя. Об этом в нормальных учебниках пишут.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог