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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
#1

Про указатель - C++

30.10.2012, 18:27. Просмотров 259. Ответов 9
Метки нет (Все метки)

Почему не работает когда я пишу вот так вот: if(*s) printf("тут"); и работает когда пишу вот так вот: if(*s=='\0') printf("тут");? Ведь это одно и тоже!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <windows.h>
#include <string.h>
#include <stdio.h>
using namespace std;
 
void reverse(char *s);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char *s, *q;
    char str[] = "Это";
    s = str;
    q = str;
    while(*s)
    {
       printf("%s\n", s);
       s++;
    }
    printf("%s\n", s);
    reverse(s);
    return 0;
}
 
void reverse(char *s)
{
    if(*s) printf("тут");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2012, 18:27     Про указатель
Посмотрите здесь:

Про указатель *, указатель на указатель **, и про new - C++
#include &quot;stdafx.h&quot; class neuro { public: double *inputs; int inputs_count; neuro(int uc, double ii ) { ...

Про указатель на функцию - C++
Народ, у меня есть стандартная функция (создание потоков), она требует чтобы ей 3-м параметром передали указатель на функцию (void*...

Указатель и снова про русский язык в консоли - C++
Здравствуйте.Указатель не возвращает русские буквы. Пишу что то на русском, возвращает набор символов, на анг все норм. Как можно...

Указатель this - C++
Всем привет. Как можно преобразовать указатель this в строку, для дальнейшего использования в функции MessageaBoxA()? Просто - напросто. я...

Указатель на указатель - C++
Добрый день! Читал про многоуровневую адресацию, но не понял одну штуку. Когда мы пользуемся функцией printf(), то можем написать код...

Указатель - C++
const int MAX = 5; void f(double*); int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;Russian&quot;); double array = { 10.0,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.10.2012, 18:31     Про указатель #2
Потому что это не одно и то же.

Надо if(!*s)
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 18:35  [ТС]     Про указатель #3
Цитата Сообщение от Schizorb Посмотреть сообщение
Потому что это не одно и то же.

Надо if(!*s)
Тогда что означает записать if(*s) printf("тут"); ?
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.10.2012, 18:37     Про указатель #4
C++
1
if(*s)
аналогично

C++
1
if(*s != 0)
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 18:42  [ТС]     Про указатель #5
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
if(*s)
аналогично

C++
1
if(*s != 0)
Под этим if(*s != 0) имеется ввиду 0 или конец строки?
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.10.2012, 18:45     Про указатель #6
Одно и то же, символ '\0' имеет целочисленное значение 0.
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 18:51  [ТС]     Про указатель #7
Цитата Сообщение от Schizorb Посмотреть сообщение
Одно и то же, символ '\0' имеет целочисленное значение 0.
Если это одно и тоеж, тогда почему работает этот код: (вопрос в комментарии к коду)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
void reverse (char *s);
 int main()
{
  char str [] = "eto test";
  reverse (str);
      return 0;
}
 
// вывод строки в обратном порядке
void reverse (char *s)
 
{if (*s) // если указатель стоит на конце строки, то делать рекурсию, но ведь он не на конце строки. Запутали меня вообще. Давайте помогайте распутывать.
reverse (s+1);
else
return;
 
cout << *s;
 }
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.10.2012, 19:02     Про указатель #8
C++
1
if (*s) // если указатель стоит на конце строки, то делать рекурсию, но ведь он не на конце строки.
Наоборот, условие истинно, если он НЕ стоит в конце строки, т.е. если *s != '\0'.
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
30.10.2012, 19:20  [ТС]     Про указатель #9
Разобрался, спасибо.

Добавлено через 13 минут
Цитата Сообщение от Schizorb Посмотреть сообщение
C++
1
if (*s) // если указатель стоит на конце строки, то делать рекурсию, но ведь он не на конце строки.
Наоборот, условие истинно, если он НЕ стоит в конце строки, т.е. если *s != '\0'.
Ещё подскажите пожалуйста, все вопросы в комментарии.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <windows.h>
#include <string.h>
#include <stdio.h>
using namespace std;
 
void reverse(char *s);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char *s, *q;
    char str[] = "Это";
    s = str;
    q = str;
    while(*s)
    {
       printf("%s\n", s);
       s++;
    }
    printf("%s\n", q);
    reverse(s, q); // передаю два указателя: 1). s указывает на конец строки. 2). q указывает на начало строки
    return 0;
}
 
void reverse(char *s, char *q) 
{
    printf("%s\n", s);
    if(*s!=*q) reverse(s-1); // тут у нас если значение указателя s не равно значению указателя q, то у нас будет делаться рекурсия и в определённый момент q==s и тогда у нас будет return. Почему собственно код не работает? Вроде всё правильно.
    else return;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2012, 20:14     Про указатель
Еще ссылки по теме:

Указатель на указатель - C++
Чем отличаются указатели на указатель от ссылки на указатель? Встретилась программа для работы со списками. В ней есть функция Insert....

указатель - C++
вычислить одномерную массив через указатель Добавлено через 1 минуту вычислить одномерную массив через указатель

Указатель this - C++
Здравствуйте! Пишу на vb и delphi, решил изучить C++ с нуля. Учу в среде C++ Builder XE7. Для практики решил написать простейшее...

Указатель - C++
Здравствуйте товарищи,хотел узнать,вощем мне надо узнать количество строк в файле,работаю с dat файлами,потом нужно переместить указатель...


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

Или воспользуйтесь поиском по форуму:
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
30.10.2012, 20:14     Про указатель #10
Этот код вообще не компилируется. Функция reverse должна принимать 2 параметра? Почему в прототипе он один? И в рекурсивном вызове тоже один: reverse(s-1).
Yandex
Объявления
30.10.2012, 20:14     Про указатель
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru