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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 127, средняя оценка - 4.69
sly444
5 / 5 / 1
Регистрация: 29.12.2010
Сообщений: 146
#1

Начинающий си/си++ программист - C++

29.12.2010, 21:30. Просмотров 15822. Ответов 110
Метки нет (Все метки)

Я вот собираюсь начать учить язык си а впоследствии си++. У меня есть книга Б.Керниган, Д.Ритчи "Язык программирования си". Мне нравится как там написано, да и отзывы об этом учебнике неплохие. У меня проблема с компиляторами, я не могу понять какой лучше закачал наконец DEV-C++ вроде отличный интерфейс, русский. Дошло до написания первой программы, написал как в учебнике написано, первый пример. Должна была получится программа, которая писала бы - Здравствуй мир, но компилятор почему то комментарий Здравствуй мир выделил красным цветом, я этому значения не придал, скомпилировал программу, и нажал на запуск. При запуске появляется окно на долю секунды и исчезает. В учебнике написано, что у них примеры для UNIX системы, для других систем - надо консультироваться со специалистами. Подскажите пожалуйста как писать на виндовсе. Буду также рад любой информации по языку си, так как я только начинающий. Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 21:30     Начинающий си/си++ программист
Посмотрите здесь:

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

Начинающий программист - C++
Всем привет, если у кого есть время, решите эту задачку, в программировании я на уровне "блондинки" (не знаю зачем полез в это дело), но...

Начинающий программист: с какой программы начать? - C++
Привет всем!Я только начал интересоваться программированием и не знаю с чего мне начать,посоветуйте пожалуйста с какой программы начать?(За...

Что должен знать начинающий программист? - C++
что нужно знать и уметь чтобы устроиться на работу программистом стажёром C++ ???

факториал числа. я начинающий - C++
Нужно создать функцию для вычисления факториала числа. Чтобы числа вводить с клавиатуры и предусмотреть возможность многократных расчетов с...

Начинающий: Запрос к Ms Access в VC++ - C++
Не понимаю, запрос на выборку получается, а на вставку - нет. ADODB::_ConnectionPtr cn=NULL; HRESULT hr=S_OK; ...

Начинающий изучать C++ (подскажите литературу) - C++
Здравствуйте всем, я хочу начать изучать C++, мне нужно чтоб мне посоветовали какие книжки почитать, для изучения синтаксиса языка C++ да и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sly444
5 / 5 / 1
Регистрация: 29.12.2010
Сообщений: 146
13.01.2011, 15:20  [ТС]     Начинающий си/си++ программист #41
Цитата Сообщение от Flynn84 Посмотреть сообщение
Что-то все начали массово советовать учебники по плюсу, хотя автор темы просил просто СИ.
У меня ситуация практически такая же. Сначала хочу изучить СИ.

Из этой темы пока почерпнул вот это:

Б.Керниган, Д.Ритчи "Язык программирования си"
учебники Архангельского
лекции М. Г. Медведева
"ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ СИ" Ю.Ю.Громов, С.И.Татаренко

Гербердт Шилдт "Полный справочник по С++" - вроде говорят, что в начале есть и про СИ.

Еще что-нибудь достойное есть?

Вот спасибо. Только учебник Б.Керниган, Д.Ритчи "Язык программирования си" написан нетак, у меня он есть, там программирование под unix и часто функции несовпадают с виндой
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.01.2011, 15:23     Начинающий си/си++ программист #42
Flynn84, а зачем начинать с Си, а потом учить Си++? Си и Си++ - два разных языка, поэтому сказать "начать с Си, потом перейти на Си++" - то же самое, что сказать, например, "начать с Паскаля, потом перейти на Си++". Лучше сразу учить плюсы, поскольку синтаксис у Си и Си++ очень похож, и эти языка расходятся в главном - в подходе к программированию. И объектно-ориентированный подход, надо сказать, сейчас котируется намного больше, нежели чисто процедурный.
Flynn84
0 / 0 / 0
Регистрация: 13.01.2011
Сообщений: 7
13.01.2011, 16:47     Начинающий си/си++ программист #43
Цитата Сообщение от sly444 Посмотреть сообщение
Только учебник Б.Керниган, Д.Ритчи "Язык программирования си" написан нетак, у меня он есть, там программирование под unix и часто функции несовпадают с виндой
Странно, но ты же сам хвалишь этот учебник в первом сообщении?

Добавлено через 8 минут
Цитата Сообщение от silent_1991 Посмотреть сообщение
Flynn84, а зачем начинать с Си, а потом учить Си++? Си и Си++ - два разных языка, поэтому сказать "начать с Си, потом перейти на Си++" - то же самое, что сказать, например, "начать с Паскаля, потом перейти на Си++". Лучше сразу учить плюсы, поскольку синтаксис у Си и Си++ очень похож, и эти языка расходятся в главном - в подходе к программированию. И объектно-ориентированный подход, надо сказать, сейчас котируется намного больше, нежели чисто процедурный.
Ну ты говоришь, что синтаксис очень похож. Значит все-таки не совсем тоже самое, что перейти с Паскаля на ++ . Если уже знаешь Си, то изучить плюсы видимо проще, чем если знаешь только Паскаль.
Другой вопрос, насколько будет востребован в ближайшем будущем простой Си. Ты заставил меня задуматься. Недели две назад я читал в инете различные обзоры и рейтинги востребованности языков. Мне показалось, что все-таки для Си еще не все потеряно.
Еще интересно, почему никто не сказал об этом автору темы в самом начале? А только сейчас мне
sly444
5 / 5 / 1
Регистрация: 29.12.2010
Сообщений: 146
13.01.2011, 16:52  [ТС]     Начинающий си/си++ программист #44
Цитата Сообщение от Flynn84 Посмотреть сообщение
Странно, но ты же сам хвалишь этот учебник в первом сообщении?
Я говорил что хорошо написана. но там нету многих вещей, к примеру нету функции getch и библеотеке к ней
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
13.01.2011, 18:01     Начинающий си/си++ программист #45
Flynn84, Си более низкоуровневый язык. Он используется для написания не прикладного ПО, а в основном системного + программ для микроконтроллеров и т.п. В СИ все делается через работу с памятью, в С++ можно обойтись без явной работы с памятью, используя все его плюсы (оригинальная игра слов получилась). + на основе С++ сделаны Java и C#. Так что думайте)

Добавлено через 1 минуту
sly444, А какой смысл использовать getch? Как ни странно в Unix раньше все компилировалось и запускалось через коммандную строку (да и сейчас это вполне неплохо) следовательно getch тупо не нужен)
silent_1991
13.01.2011, 18:04
  #46

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
на основе С++ сделаны Java
Не совсем верно, в яве только синтаксис взят от плюсов, реализован же язык совсем по-другому.

kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
13.01.2011, 20:38     Начинающий си/си++ программист #47
Да, с адресами работать круто. Отладка на порядок быстрее идёт. А в C++ необходимо пользоваться классами. Так, если надо узнать какой элемент находится по адресу такому-то, всё приплыл.
Например
C++
1
2
vector<int> v;
&v[i];
Адрес не взять. (То есть можно, но муторно, делов до...) А я брал, потом включал ассемблерный отладчик, работая в С... СМотрел чё там и почему. Я и говорю- на порядок быстрее отладка идёт.

С другой стороны, надо испльзовать всю мощь C++, который я рассматриваю как средство для написания СОБСТВЕННОГО синтаксиса для выполнения РАЗНЫХ заданий. Так, я теперь перегоняю текстовый файл в память одним движением
C++
1
myfstream>> stroka
Не забочусь о выделении памяти, открытии файла и прочее. Разве плохо? Очень хорошо при допущении корректности, конечно, всех классов, myfstream в частности. И надо его осваивать. Далее- сама наглядность синтаксиса, его интуитивная понятность- то бишь переопредеоление операторов- играет неоценимую роль при чтении больших проектов своих ли или чужих, неважно. И это достоинство С++.

Но хорошо всё-таки, что я сначала изучил С (имея ввиду именно работу с памятью), хотя если бы я не изучил его, а сразу начал с высокоуровневого программирования, может время бы зря не потерял, кто его знает.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
13.01.2011, 21:22     Начинающий си/си++ программист #48
А в C++ необходимо пользоваться классами. Так, если надо узнать какой элемент находится по адресу такому-то, всё приплыл.
Например
C++
1
2
vector<int> v;
&v[i];
Адрес не взять. (То есть можно, но муторно, делов до...)
Стесняюсь спросить... А итераторы для кого писали? Итератор это указатель и следовательно адрес. И берется этот адрес влегкую...
C++
1
std::cout<<vec.begin+i<<'\n';
sly444
5 / 5 / 1
Регистрация: 29.12.2010
Сообщений: 146
13.01.2011, 22:06  [ТС]     Начинающий си/си++ программист #49
sly444, А какой смысл использовать getch? Как ни странно в Unix раньше все компилировалось и запускалось через коммандную строку (да и сейчас это вполне неплохо) следовательно getch тупо не нужен)
Так при запуске приложения оно тут же исчезает, getch делает так, чтобы консоль исчезал только когда нажмеш любую кнопку
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.01.2011, 22:11     Начинающий си/си++ программист #50
sly444, а что, кроме этого, вам мешает читать K&R? Всё остальное совпадает (да и это бы совпадало, если бы вы в виндах компилировали из консоли и тут же из консоли запускали, как это происходить в линуксе).
sly444
5 / 5 / 1
Регистрация: 29.12.2010
Сообщений: 146
13.01.2011, 22:12  [ТС]     Начинающий си/си++ программист #51
silent_1991, Да я сейчас коментарии почитал, наверно лучше учить си++
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
13.01.2011, 22:21     Начинающий си/си++ программист #52
sly444, не беспокойтесь, изучая Си++, вы всё равно никуда не денетесь от процедурного программирования (вернее от самого понятия "процедура"), просто, возможно, не узнаете сильно низкоуровневых вещей, которые нужны в Си, но без которых можно обойтись в Си++. А может и узнаете, но при необходимости. Я сам начинал с чистого Си, и переход на плюсы для меня болезненным не был (по мне, объектно-ориентированный подход куда более естественный в плане того, что с объектами мы, по сути, сталкиваемся каждый день: стул - объект, кровать - объект и т.д.), но я слышал, что многим сложно переучиваться с Си на Си++, поскольку приходится кардинально менять всю философию программирования, которая у программиста на Си уже въелась в кору мозга))).
sly444
5 / 5 / 1
Регистрация: 29.12.2010
Сообщений: 146
13.01.2011, 22:23  [ТС]     Начинающий си/си++ программист #53
silent_1991, Я согласен.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
14.01.2011, 00:37     Начинающий си/си++ программист #54
silent_1991, Ну дык я полагаю что в Си ты не уходил в чисто низкоуровневое программирование и системное программирование под Unix. Хедеров же стандартных под Юникс дофига просто, где действительно требуется низкоуровневое программирование.
Более того читая сейчас Страуструпа - он описывает либу производную от либы FLTK граф. интерфейс. Ну и там от работы с указателями и т.п. никуда не деться, при реализации по-крайней мере.

Про вывод адреса я кстати был не прав. Вот так выводит адрес

C++
1
2
3
4
5
6
7
8
9
10
11
#include <vector>
#include <iostream>
#include <iterator>
 
int main()
{
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    std::cout<<vec.begin()._Myptr<<'\n';
    std::cout<<(vec.begin()+1)._Myptr<<'\n';
    return 0;
}
silent_1991
14.01.2011, 00:41
  #55

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
я полагаю что в Си ты не уходил в чисто низкоуровневое программирование и системное программирование под Unix
Это зря))) Я ж не программист, у меня специальность "Вычислительные машины, комплексы, системы и сети". Соответственно был предмет "Операционные системы". И там мы достаточно на низкий уровень уходили, и именно в лине))) Правда сейчас уже ни черта не помню, но помню, что это было жёстко))

kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
14.01.2011, 00:54     Начинающий си/си++ программист #56
Цитата Сообщение от ForEveR Посмотреть сообщение
Стесняюсь спросить... А итераторы для кого писали? Итератор это указатель и следовательно адрес. И берется этот адрес влегкую...
Код C++
1
std::cout<<vec.begin+i<<'\n';
Чё-то не то ВЫ написали
НО вообще имея ввиду vector<int> сие сделать нетрудно

А вот у меня vector<string> v;

Как узнать адрес нулевого элемента?

Работая с С я бы написал так:
C++
1
2
3
4
5
6
7
char** p;
//Здесь инициализация, выделение памяти под каждый член массива
p=  new  char*[2];
p[0]= "aaa";
p[1]= "bbb";
printf ("%x", &p[0]);
getchar ();
После этого я OllyDbg приаттачиваюсь к процессу и смотрю адрес p[0]б чё там есть

А вот как мне адрес этого элемента узнать?
vector<string> v;
v[0]

Это раз. И второе: c итераторами возня. А адрес берётся просто. Просто прибавляется & к имени переменной и всё. Вот это я и называю "на порядок дольше"

Добавлено через 1 минуту
Ну инициализация p это один из вариантов только представлен, можно, конечно по-разному
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
14.01.2011, 00:57     Начинающий си/си++ программист #57
kravam,
C++
1
vec.begin()._Myptr
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
#include <string>
#include <iostream>
 
int main()
{
    std::vector<std::string> vec;
    vec.push_back("123");
    vec.push_back("456");
    std::cout<<vec.begin()._Myptr<<'\n';
    std::cout<<(vec.end()-1)._Myptr<<'\n';
    return 0;
}
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
14.01.2011, 01:09     Начинающий си/си++ программист #58
А у меня компилятору неизвестно имя
_Myptr

Добавлено через 1 минуту
C++
1
        std::cout<<vec.begin()<<'\n';
А вот так вот увы и ах ничё не получается.
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
14.01.2011, 01:24     Начинающий си/си++ программист #59
kravam, Хм. Оно может на3ываться по-другому. видимо это просто 3адрочки MSVS
Но я опять же говорил уже в этой теме или в другой, что С++-классы не предназначены для работы с памятью напрямую...

Добавлено через 4 минуты
И да...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
#include <iostream>
 
int main()
{
    int Arr[]={1,2,3,4,5};
    std::vector<int> vec(Arr, Arr+sizeof(Arr)/sizeof(*Arr));
    int* ptr=&vec[0];
    std::cout<<ptr<<'\n';
    ptr=&vec[1];
    std::cout<<ptr<<'\n';
    return 0;
}
Добавлено через 1 минуту
И еще одно да...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
#include <iostream>
 
int main()
{
    char* Arr[]={"1","2","3","4","5"};
    std::vector<std::string> vec(Arr, Arr+sizeof(Arr)/sizeof(*Arr));
    std::string* ptr=&vec[0];
    std::cout<<ptr<<'\n';
    ptr=&vec[1];
    std::cout<<ptr<<'\n';
    return 0;
}
Добавлено через 7 минут
Ну и так на всякий случай преимущество С++...

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
#include <vector>
#include <iostream>
 
template<class T>
T* returnAddr(T& one)
{
    return &one;
}
 
int main()
{
    char* Arr[]={"1","2","3","4","5"};
    std::vector<std::string> vec(Arr, Arr+sizeof(Arr)/sizeof(*Arr));
    std::cout<<returnAddr(vec[0])<<'\n';
    std::cout<<returnAddr(vec[1])<<'\n';
    int Arr2[]={1,2,3,4,5};
    std::vector<int> vec2(Arr2, Arr2+sizeof(Arr2)/sizeof(*Arr2));
    std::cout<<returnAddr(vec2[0])<<'\n';
    std::cout<<returnAddr(vec2[1])<<'\n';
    double Arr3[]={0.1, 0.2, 0.3, 0.4, 0.5};
    std::vector<double> vec3(Arr3, Arr3+sizeof(Arr3)/sizeof(*Arr3));
    std::cout<<returnAddr(vec3[0])<<'\n';
    std::cout<<returnAddr(vec3[1])<<'\n';
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2011, 01:31     Начинающий си/си++ программист
Еще ссылки по теме:

C++, <fstream>, начинающий, ошибка на выполнении - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; class Write { public: char s, *name, way; short int N; ...

C++, <fstream>, начинающий, ошибка на выполнении - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; class Write { public: char s, *name, way; short int N; ...

Начинающий, посоветуйте, с чего начать? - C++
Здравствуйте, давно хотел заняться программированием, и сейчас, со всей серьезностью решил изучать. Помогите решить непростой для меня...

Как сравнить числа.(начинающий) - C++
Как сравнить числа например: если введённое число больше 40 cout &lt;&lt;&quot;неправильный ввод&quot;&lt;&lt;endl; а если ведённое число меньше 40 сделать...

Начинающий студент. С чем едят компилятор? - C++
Здравствуйте уважаемые форумчане... Как написано в заголовке темы, я являюсь начинающим студентом, которому выпало задание научиться...


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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
1691 / 878 / 44
Регистрация: 04.06.2008
Сообщений: 5,423
14.01.2011, 01:31     Начинающий си/си++ программист #60
Не пойдёт. Первый код не прассматривал, а я про второй. Это частный случай.
У меня vector<string> v инициализируется данными в процессе программы
C++
1
2
3
string stroka (&p[i])
//где p- указатель на  массив элементов типа char  вычисляется В ПРОЦЕССЕ ВЫПОЛНЕНИЯ программы, НЕ ЗАРАНЕЕ 
v.push_back (string)
Ну дальше я повторяюсь уже. После нескольких push_back адрес какого-либо элемента v взять проблематично довольно.

Не по теме:

Смотрим 1-ый канал!



Добавлено через 1 минуту
Перефразируя Довлатова: "О вреде пьянства сказано много, теперь поговорим о его пользе"
Я не говорю о неоспоримых достоинствах С++, я о недостатках щас.

Добавлено через 3 минуты
ПО поводу последнего кода- в С тоже функции применяются. Только я не буду писать функцию для взятия адреса чего-нибудь. Я напишу
C++
1
&<чё-нибудь> ;
Yandex
Объявления
14.01.2011, 01:31     Начинающий си/си++ программист
Ответ Создать тему
Опции темы

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