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

ifdef и Ко, указатели в фунциях - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 10:24     ifdef и Ко, указатели в фунциях #1
1.как используются ifdef и endif
2. как реализоввать, ну например, такое:
C++
1
int myFunc(int *one, int *two, int *three)
куда описание этих указателей засунуть и как, а еще как сделать указатели на строки в функциях

Добавлено через 44 секунды
и чуть не забыл
3.что такое pragma
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2010, 10:24     ifdef и Ко, указатели в фунциях
Посмотрите здесь:

Указатели.... C++
C++ Указатели
Указатели C++
Избавляемся от #ifdef DEBUG C++
Что такое __SC__ в #ifdef? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
16.07.2010, 10:27     ifdef и Ко, указатели в фунциях #2
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
1.как используются ifdef и endif
По данному вопросу (и не только) есть прекрасный FAQ от Evg'a: Препроцессорные директивы в C/C++ (#include, #define и прочее).
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
2. как реализоввать, ну например, такое:
C++
1
int myFunc(int *one, int *two, int *three)
куда описание этих указателей засунуть и как, а еще как сделать указатели на строки в функциях
Тебе самому понятен вопрос, который ты задал?
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 10:31  [ТС]     ifdef и Ко, указатели в фунциях #3
я то, конечно, понял..щас попробую объяснить
есть функция, описанная выше...указатели должны же на что то указывать, где разместить то, куда они должны указывать и как
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 10:40     ifdef и Ко, указатели в фунциях #4
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
я то, конечно, понял..щас попробую объяснить
есть функция, описанная выше...указатели должны же на что то указывать, где разместить то, куда они должны указывать и как
вот небольшой пример...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int myFunc(int* a, int* b, int* c)
{
    *a=*c;
    *c=*b;
    *b=19;
    return 0;
}
 
int main()
{
    int a=4, b=5, c=6;
    std::cout << "Before:" << std::endl;
    std::cout << a << "\t" << b << "\t" << c << std::endl;
    myFunc(&a, &b, &c);
    std::cout << "After:" << std::endl;
    std::cout << a << "\t" << b << "\t" << c << std::endl;
    return EXIT_SUCCESS;
}
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 14:10  [ТС]     ifdef и Ко, указатели в фунциях #5
спасибо
C++
1
int myFunc(int* a, int* b, int* c)
а теперь вместо int'ов нужео что то поставить чтобы получился указатель на строку, при том все три переменных указатели на строки
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 14:13     ifdef и Ко, указатели в фунциях #6
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
а теперь вместо int'ов нужео что то поставить чтобы получился указатель на строку, при том все три переменных указатели на строки
Вместо int* ставь char* (с модификатором const, если значение строки не меняется внутри функции)
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 14:14  [ТС]     ifdef и Ко, указатели в фунциях #7
а если строка вводится пользователем?
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 14:19     ifdef и Ко, указатели в фунциях #8
Даже если строка вводится пользователем
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 14:23  [ТС]     ifdef и Ко, указатели в фунциях #9
а можно ли создать указатель на функцию и использовать его в другой функции?
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 14:24     ifdef и Ко, указатели в фунциях #10
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
а можно ли создать указатель на функцию и использовать его в другой функции?
Можно
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 14:28  [ТС]     ifdef и Ко, указатели в фунциях #11
а можете привести примерчик?
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 14:44     ifdef и Ко, указатели в фунциях #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
int add(int a, int b)
{
    return a+b;
}
 
int operation(int a, int b, int (*ptr)(int, int))
{
    return ptr(a, b);
}
 
int main(void)
{
    int (*pfunc)(int, int) = &add;           //Указатель на функцию add
    std::cout << operation(4, 6, pfunc) << std::endl;//передается функции operation
    system("pause");
    exit(EXIT_SUCCESS);
}
Добавлено через 9 минут
Можно упростить предыдущий пример, используя ключевое слово typedef:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
typedef int (*funcPtr)(int, int);//Определяем псевдоним для указателя на функцию
 
int add(int a, int b)
{
    return a+b;
}
 
int operation(int a, int b, funcPtr ptr)
{
    return ptr(a, b);
}
 
int main(void)
{
    funcPtr pfunc = &add;                       //Указатель на функцию add
    std::cout << operation(4, 6, pfunc) << std::endl;   //передается функции operation
    system("pause");
    exit(EXIT_SUCCESS);
}
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 14:58  [ТС]     ifdef и Ко, указатели в фунциях #13
а можно написать так?
C++
1
2
char a[50];
a[50]="escape";
Добавлено через 3 минуты
и почему если написать так:
C++
1
2
char a[50];
cin >> a[50];
он пишет, что необъявленный идентификатор "a"
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 15:03     ifdef и Ко, указатели в фунциях #14
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
а можно написать так?
C++
1
2
char a[50];
a[50]="escape";
Это будет неправильно. Сразу несколько ошибок:
  1. Ты выделил место для строки из 50 символов. Первый символ имеет индекс 0, последний - 49 (причем это нуль-терминатор, символ '\0', обозначающий конец строк С).
  2. a[50] - это символ, а ты пытаешься присвоить ему строку
  3. Присваивание строк выполняется функцией strcpy



Добавлено через 1 минуту
Цитата Сообщение от RoY_Mu$T@nG Посмотреть сообщение
он пишет, что необъявленный идентификатор "a"
В данном случае для того, чтобы обратиться к строке, тебе нужно использовать идентификатор а, а чтобы к отдельному символу строки - идентификатор а[i]
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 15:04  [ТС]     ifdef и Ко, указатели в фунциях #15
а если мне нужно присвоить строку, которую вводит пользователь..какую функцию использовать...на ум приходит getline()
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 15:09     ifdef и Ко, указатели в фунциях #16
C++
1
2
3
const size_t size = 50;
char a[size];
std::cin.getline(a, size);
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 15:16  [ТС]     ifdef и Ко, указатели в фунциях #17
strcpy работает так?
C++
1
2
char str[80];
strcpy("hello",str);
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
16.07.2010, 15:16     ifdef и Ко, указатели в фунциях #18
RoY_Mu$T@nG, Наоборот.
strcpy(str, "hello").
Aaxenon
Light Knight
 Аватар для Aaxenon
106 / 29 / 3
Регистрация: 03.06.2010
Сообщений: 361
16.07.2010, 15:27  [ТС]     ifdef и Ко, указатели в фунциях #19
Цитата Сообщение от Nameless One Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
typedef int (*funcPtr)(int, int);//Определяем псевдоним для указателя на функцию
int add(int a, int b)
{
* * * * return a+b;
}
int operation(int a, int b, funcPtr ptr)
{
* * * * return ptr(a, b);
}
int main(void)
{
* * * * funcPtr pfunc = &add; * * * * * * * * * * * * * * * * * * * * * //Указатель на функцию add
* * * * std::cout << operation(4, 6, pfunc) << std::endl; * * * //передается функции operation
* * * * system("pause");
* * * * exit(EXIT_SUCCESS);
}
что значит "ptr" и "pfunc"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2010, 15:27     ifdef и Ко, указатели в фунциях
Еще ссылки по теме:

C++ Корректность использования #ifdef для предотвращения компиляции
C++ Директива #ifdef _DEBUG
C++ #ifdef _WIN32 что это?

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.07.2010, 15:27     ifdef и Ко, указатели в фунциях #20
Nameless One, да оно и проще работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int sum(int a, int b){ return a + b; }
int operation(int a, int b, int (*func)(int, int)){ return func(a, b); }
 
int main(){
    int a = 2, b = 2;
    
    std::cout << a << " + " << b << " = " << operation(a, b, sum) << std::endl;
    
    return 0;
}
Yandex
Объявления
16.07.2010, 15:27     ifdef и Ко, указатели в фунциях
Ответ Создать тему
Опции темы

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