Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/107: Рейтинг темы: голосов - 107, средняя оценка - 4.71
5 / 5 / 3
Регистрация: 29.12.2010
Сообщений: 146
1

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

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

Author24 — интернет-сервис помощи студентам
Я вот собираюсь начать учить язык си а впоследствии си++. У меня есть книга Б.Керниган, Д.Ритчи "Язык программирования си". Мне нравится как там написано, да и отзывы об этом учебнике неплохие. У меня проблема с компиляторами, я не могу понять какой лучше закачал наконец DEV-C++ вроде отличный интерфейс, русский. Дошло до написания первой программы, написал как в учебнике написано, первый пример. Должна была получится программа, которая писала бы - Здравствуй мир, но компилятор почему то комментарий Здравствуй мир выделил красным цветом, я этому значения не придал, скомпилировал программу, и нажал на запуск. При запуске появляется окно на долю секунды и исчезает. В учебнике написано, что у них примеры для UNIX системы, для других систем - надо консультироваться со специалистами. Подскажите пожалуйста как писать на виндовсе. Буду также рад любой информации по языку си, так как я только начинающий. Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2010, 21:30
Ответы с готовыми решениями:

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

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

Начинающий программист С++ хочет учиться
Привет! Я учу С++ сам, в университете (2 пары в неделю, не стремительно) Этот язык выбрал потому...

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

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

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

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

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

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

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

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

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

Не по теме:

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

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

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

Но хорошо всё-таки, что я сначала изучил С (имея ввиду именно работу с памятью), хотя если бы я не изучил его, а сразу начал с высокоуровневого программирования, может время бы зря не потерял, кто его знает.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
13.01.2011, 21:22 48
А в C++ необходимо пользоваться классами. Так, если надо узнать какой элемент находится по адресу такому-то, всё приплыл.
Например
C++
1
2
vector<int> v;
&v[i];
Адрес не взять. (То есть можно, но муторно, делов до...)
Стесняюсь спросить... А итераторы для кого писали? Итератор это указатель и следовательно адрес. И берется этот адрес влегкую...
C++
1
std::cout<<vec.begin+i<<'\n';
1
5 / 5 / 3
Регистрация: 29.12.2010
Сообщений: 146
13.01.2011, 22:06  [ТС] 49
sly444, А какой смысл использовать getch? Как ни странно в Unix раньше все компилировалось и запускалось через коммандную строку (да и сейчас это вполне неплохо) следовательно getch тупо не нужен)
Так при запуске приложения оно тут же исчезает, getch делает так, чтобы консоль исчезал только когда нажмеш любую кнопку
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
13.01.2011, 22:11 50
sly444, а что, кроме этого, вам мешает читать K&R? Всё остальное совпадает (да и это бы совпадало, если бы вы в виндах компилировали из консоли и тут же из консоли запускали, как это происходить в линуксе).
0
5 / 5 / 3
Регистрация: 29.12.2010
Сообщений: 146
13.01.2011, 22:12  [ТС] 51
silent_1991, Да я сейчас коментарии почитал, наверно лучше учить си++
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
13.01.2011, 22:21 52
sly444, не беспокойтесь, изучая Си++, вы всё равно никуда не денетесь от процедурного программирования (вернее от самого понятия "процедура"), просто, возможно, не узнаете сильно низкоуровневых вещей, которые нужны в Си, но без которых можно обойтись в Си++. А может и узнаете, но при необходимости. Я сам начинал с чистого Си, и переход на плюсы для меня болезненным не был (по мне, объектно-ориентированный подход куда более естественный в плане того, что с объектами мы, по сути, сталкиваемся каждый день: стул - объект, кровать - объект и т.д.), но я слышал, что многим сложно переучиваться с Си на Си++, поскольку приходится кардинально менять всю философию программирования, которая у программиста на Си уже въелась в кору мозга))).
0
5 / 5 / 3
Регистрация: 29.12.2010
Сообщений: 146
13.01.2011, 22:23  [ТС] 53
silent_1991, Я согласен.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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;
}
0
silent_1991
14.01.2011, 00:41
  #55

Не по теме:

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

1
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
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 это один из вариантов только представлен, можно, конечно по-разному
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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;
}
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
14.01.2011, 01:09 58
А у меня компилятору неизвестно имя
_Myptr

Добавлено через 1 минуту
C++
1
        std::cout<<vec.begin()<<'\n';
А вот так вот увы и ах ничё не получается.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
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;
}
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
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
&<чё-нибудь> ;
0
14.01.2011, 01:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2011, 01:31
Помогаю со студенческими работами здесь

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

Начинающий программист
Здравствуйте! Кратко о себе, мне 17 собираюсь поступать в ВУЗ, но не на специальность...

Начинающий программист С++
Ищу работу(можно и удалённо) для увеличения опыта и практики. Есть базовые знания по...

Начинающий программист
Здравствуйте. Москва, ищу работу желательно не удаленно , практически вся неделя свободна для...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru