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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
#1

Что значит char c[10] - C++

16.11.2012, 02:40. Просмотров 2403. Ответов 30
Метки нет (Все метки)

объясните пожалуйста пошагово этот код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
 
int main( )
{
   char c[10], c2;
 
   cout << "Type 'abc': ";
   c2 = cin.get( );
   cin.unget( );
   cin.getline( &c[0], 9 );
   cout << c << endl;
}
хочу понять, что значит char c[10] это создание массива из 10 символов?
что делает функция get и unget, и getline... что это за параметры, &c[0] передается по ссылке... а нельзя просто передать, зачем по ссылке передавать? и что девять означает. эх, вот начинаю C++ изучать. конечно непривычно весьма.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2012, 02:40     Что значит char c[10]
Посмотрите здесь:

что значит static char? - C++
подскажите что означает static char ret;

Что значит две звездочки у char? - C++
int main(int argc, char** argv)

Что значит запись char massiv[] = "text" ? - C++
Почему не указан размер массива и присваивается строка?

Что значит ^= ? - C++
нашел в коде данную фичу (язык С) не понимаю что конкретно она выполняет пример из кода ... mistake ^= i+1; ...

Что значит (int)a - C++
Пожалуйста помогите!Что значит ((int)a|(int)b) &amp; ((int)a|(int)c)!=0

Что значит 10e1 - C++
Здравствуйте, не подскажите что значит например 10e1, и вообще все числа с e, попробывал 10e1 = 100, это что-то типа степени? Заранее...

Что значит указатель **? - C++
есть код, его я разобрал, но меня пугает выражение указателя ** - прошу помочь разобраться или отослать почитать про это. Спасибо! ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lintu
0 / 0 / 0
Регистрация: 16.11.2012
Сообщений: 11
16.11.2012, 02:46     Что значит char c[10] #2
Может тебе поможет, неплохая статья для совсем начинающих, по си++
http://www.programmersclub.ru/main/

К слову вот статья именно про функции, что ты спрашиваешь http://programmersclub.ru/33/
А &c[0] - это адрес начала строки(читай массива)
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
16.11.2012, 02:50     Что значит char c[10] #3
Цитата Сообщение от Lintu Посмотреть сообщение
Может тебе поможет, неплохая статья для совсем начинающих, по си++
http://www.programmersclub.ru/main/
Дружище, ты хоть одно слово unget во всех разделах статьи там видел? ТС не про вывод HelloWorld нас спрашивает, а спрашивает именно про этот метод.

Если уж кидать ссылку, то вот http://www.cplusplus.com/reference/i...istream/unget/

unget возвращает последний символ, прочитанный из cin назад в поток cin
В результате следующий за ним getline прочитает строку, включая этот символ.
Иначе в c[10] оказалась бы введённая строка без первой буквы
alkagolik
Заблокирован
16.11.2012, 03:58     Что значит char c[10] #4
Kuzia domovenok, это извращенный отлов экзепшнов. Такое только во сне может присниться.
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 00:45  [ТС]     Что значит char c[10] #5
вчера устал видимо, гуглил я unget, но вот сейчас решил подробнее разобрать пример который там:

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
// istream::unget example
#include <iostream>
using namespace std;
 
int main () {
  char c;
  int n;
  char str[256];
 
  cout << "Enter a number or a word: ";
  c = cin.get();
 
  if ( (c >= '0') && (c <= '9') )
  {
    cin.unget();
    cin >> n;
    cout << "You have entered number " << n << endl;
  }
  else
  {
    cin.unget();
    cin >> str;
    cout << " You have entered word " << str << endl;
  }
 
  return 0;
}
получается сначала мы читаем первый символ

c = cin.get();

если это цифра то значит юзер ввел цифру

кстати, а ведь если ввести "1ывдаоывдаоыва" то программа посчитает что ввели мы число. как посоветуете нормально реализовать?

unget значит просто возвращает символ обратно в поток ввода, чтобы заново его считать. с этим разобрался, спасибо.

Только вот насчет строки cin.getline( &c[0], 9 ); здесь девять - это максимальное кол-во символов? странно, разные описания функции getline http://ru.cppreference.com/w/cpp/str...string/getline http://ru.cppreference.com/w/cpp/io/getline функции видимо разные. но вот не понятно почему передается &c[0] по ссылке... а еще интересно в конце массив выводится, никаких циклов для того чтобы собрать массив, просто "с" указано и все
cvetik13
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 5
17.11.2012, 00:57     Что значит char c[10] #6
time123
)) Судя по всему, вы переходите на С++ с паскаля или делфи)
Я так же новичок в С++ и мыслю точно так же, как и вы)
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,050
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 01:05     Что значит char c[10] #7
Цитата Сообщение от time123 Посмотреть сообщение
функции видимо разные.
Вы правы, это разные функции.
Цитата Сообщение от time123 Посмотреть сообщение
здесь девять - это максимальное кол-во символов?
Это сколько символов считать из cin.
Цитата Сообщение от time123 Посмотреть сообщение
передается &c[0] по ссылке...
Передается не по ссылке, а передается адрес первого элемента массива.
Цитата Сообщение от time123 Посмотреть сообщение
никаких циклов для того чтобы собрать массив, просто "с" указано и все
имя массива (c) является указателем на первый элемент массива, поэтому будут выведены все символы от c[0], до завершающего символа '\0'. Если его не окажется в Вашем массиве, то будет прочитана память дальше массива.
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 01:20  [ТС]     Что значит char c[10] #8
еще с указателями разбираюсь, вот к примеру код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int *a = new int; // Объявление указателя для переменной типа int
    int *b = new int(5); // Инициализация указателя
 
    *a = 10;
    *b = *a + *b;
 
     cout << "b is " << *b << endl;
 
    delete b;
    delete a;
 
    return 0;
}
при таком раскладе зачем вообще объявлять к примеру просто int a = 5; если можно с указателями сразу жонглировать
получается если указать & перед названием переменной или массивом, то получаешь адрес? еще такой вопрос, а если просто указать в данном примере cout << "b is " << b << endl; то получу адрес указателя, или нет? и если указать &b что это за адрес...

p.s. cvetik13, а вы, судя по нику, девушка?)
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2012, 01:22     Что значит char c[10] #9
time123, Получите. В данном примере. А если char* попробуете вывести - нужно будет в void* привести, чтобы увидеть адрес.
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 01:27  [ТС]     Что значит char c[10] #10
эм... что? зачем в void переводить? речь ведь идет об указателе на переменную типа char, или нет?
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2012, 01:34     Что значит char c[10] #11
time123, Да. По той простой причине, что для указателя на char перегружен оператор вывода в поток.
http://ideone.com/7oAABQ
http://ideone.com/I7XZMz

Во втором примере, вместо того что мы хотели выведет бред в первом выводе, т.к. указатель на char не терминирован нулем, потому вывод будет кривой.

http://ideone.com/BLTjef

В данном случае нулем терминирован, но строка пустая.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,050
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 01:38     Что значит char c[10] #12
Цитата Сообщение от time123 Посмотреть сообщение
при таком раскладе зачем вообще объявлять к примеру просто int a = 5; если можно с указателями сразу жонглировать
А Вы умеете жонглировать сотней мячей? =)
Цитата Сообщение от time123 Посмотреть сообщение
получается если указать & перед названием переменной или массивом, то получаешь адрес?
Да. Это операция взятия адреса.
Цитата Сообщение от time123 Посмотреть сообщение
и если указать &b что это за адрес...
Указатель же тоже храниться в памяти. Так что это будет адрес указателя =)
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2012, 01:39     Что значит char c[10] #13
Croessmah, Кстати, не факт, что это оператор взятия адреса.) И чтобы не влететь в ситуацию, когда это не оператор взятия адреса иногда лучше юзать std::addressof/boost::addressof
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,050
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 01:41     Что значит char c[10] #14
Цитата Сообщение от ForEveR Посмотреть сообщение
Croessmah, Кстати, не факт, что это оператор взятия адреса.) И чтобы не влететь в ситуацию, когда это не оператор взятия адреса иногда лучше юзать std::addressof/boost::addressof
ну это да. Но, думаю, новичку не надо с этим зацикливаться =) ибо он уйдет в такие дебри, откуда потом не выбериться
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
17.11.2012, 01:42     Что значит char c[10] #15
Croessmah, Соглашусь. Просто уточнил.
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 03:23  [ТС]     Что значит char c[10] #16
так, значит в первом случае получаем адрес указателя, а во втором адрес переменной типа char

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main()
{
    char c = 'a';
    char* pc = &c;
    std::cout << &pc << std::endl;
    std::cout << static_cast<void*>(pc) << std::endl;
}
а здесь вот http://ideone.com/7oAABQ не понятно почему это они вдруг в char сразу 4 символа поместили

в тип void приводится сам указатель, так? тогда а можно его с самого начала объявить как void, если тип char, или это будет неправильно? и еще интересует, на какие именно операции перегружен оператор для char-указателя? любопытно то что здесь http://ideone.com/BLTjef выдается пустая строка... с чего бы это, ну сам символ NULL там походу хранится.
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,050
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 03:34     Что значит char c[10] #17
Цитата Сообщение от time123 Посмотреть сообщение
выдается пустая строка... с чего бы это, ну сам символ NULL там походу хранится.
Вообще то принято, чтобы строка заканчивалась символом '\0', поэтому у Вас пустая строка.
попробуйте вот этот код:
C++
1
2
3
4
5
6
7
#include <iostream>
 
int main()
{
    char* pc = "MyString\0Hello World";
    std::cout << pc << std::endl;
}
Цитата Сообщение от time123 Посмотреть сообщение
тогда а можно его с самого начала объявить как void, если тип char, или это будет неправильно?
Указатель void, это указатель на какой-то кусок памяти.
time123
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
17.11.2012, 03:40  [ТС]     Что значит char c[10] #18
тоесть указатель на указатель? или указатель на какой-то диапазон адресов памяти?

Мне бы еще разобраться с передачей значений в функцию, вот например часть кода

string mumble( int *array, int size )

что если передать int array
вообще вот если не ошибаюсь то можно передавать в функции переменные, массивы со знаками & *
если передать без знака то передается просто значение переменной (не по ссылке), если указать знак & то передается адрес ячейки памяти, а если указать со знаком * то передается значение по данному указателю, верно? то есть в этом примере array - это походу указатель на начало массива видимо, или нет... вот кусок этого кода

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <sstream>
string program_name( "our_program" );
string version( 0.01 );
// ...
 
string mumble( int *array, int size )
{
   if ( ! array ) {
      ostringstream out_message;
 
      out_message << "ошибка: "
                  << program_name << "--" << version
                  << ": " << __FILE__ << ": " << __LINE__
                  << " -- указатель равен 0; "
                  << " а должен адресовать массив.\n";
 
      // возвращаем строку, в которой находится сообщение
      return out_message.str();
   }
   // ...
}
насчет "MyString\0Hello World" ну я в курсе что это символ конца строки, таким образом в том примере это пустая строка получается
Croessmah
Модератор
Эксперт CЭксперт С++
13051 / 7314 / 814
Регистрация: 27.09.2012
Сообщений: 18,050
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 04:00     Что значит char c[10] #19
Цитата Сообщение от time123 Посмотреть сообщение
тоесть указатель на указатель? или указатель на какой-то диапазон адресов памяти?
Указатель на ЧТО-ТО.

Пример:
http://ideone.com/Hawfby
Цитата Сообщение от time123 Посмотреть сообщение
то есть в этом примере array - это походу указатель на начало массива видимо
судя по тексту ошибки - да. Но может быть и указатель на переменную типа int, собственно массив из одного элемента
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 18:18     Что значит char c[10]
Еще ссылки по теме:

Что значит запись - C++
Собственно интересует, что значит обратиться к &quot;-1&quot; элементу в массиве &quot;old_vtable_&quot; и что я присвою 3 элементу в массиве &quot;_array&quot;?....

Что значит ошибка? - C++
помогите пожалуйста, что делать она выдает мне ошибку error C2440: '=' : cannot convert from 'const char ' to 'char ' не знаю что с этим...

Что значит знак -> в с++ - C++
Начал изучать классы и никак немогу найти инфу о символе -&gt; непонятно что он значит вот пример где он применяется // ...

Что значит getch()-48? - C++
Что значит getch()-48?

a=*b Что это значит? - C++
Подскажите пожалуйста!


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

Или воспользуйтесь поиском по форуму:
cvetik13
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 5
18.11.2012, 18:18     Что значит char c[10] #20
Цитата Сообщение от time123 Посмотреть сообщение

p.s. cvetik13, а вы, судя по нику, девушка?)
Логично, что девушка. Ето что-то меняет?
Yandex
Объявления
18.11.2012, 18:18     Что значит char c[10]
Ответ Создать тему
Опции темы

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