Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/23: Рейтинг темы: голосов - 23, средняя оценка - 4.70
h3mbr0
296 / 105 / 31
Регистрация: 12.03.2012
Сообщений: 420
1

В чем разница между int main(){} и int main(void){}?

09.04.2012, 16:00. Просмотров 4205. Ответов 19
Метки нет (Все метки)

Только недавно начал изучать язык, и появилось несколько вопросов:
1) в чем разница между int main(){} и int main(void){}?
2) в чем разница между string.h string и cstring?
3) почему объявление char s[10]="0123456789"; переполняет массив? ведь с 0 по 9 элемент 10 символов, а 10 - \0?
4) для чего нужен экземляр структуры в виде функции? т.е struct func1() {}? чем он отличается от обычной функции?
вроде пока все)
P.S Прошу прощения что вопреки правилам все в одной теме, но не создавать же по таким пустякам столько тем
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 16:00
Ответы с готовыми решениями:

Какая разница между int main и void main?
какая разница между (int main) i (void main)?

int main() или int main(void)?
чем отличается : не сообщаю о наличии аргументов функция не принимает никаких...

Какой новые синтаксис: int main() VS. void main()
Долго не занимался программированием , но тут жена решила поучится , да и сам...

Почему в одних случаях пишут void main(), а в других случаях int main() {return 1;}
Препод мне доказывает, что void в main`е писать неправильно, а объяснить не...

int main() VS void main()
Вот товарищ Герберт Шилдт считает, что функция main() должна вид int main()...

19
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.04.2012, 16:08 2
Цитата Сообщение от h3mbr0 Посмотреть сообщение
1) в чем разница между int main(){} и int main(void){}?
в C++ разницы никакой, в Си:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void f()
{
}
 
void g(void)
{
}
 
int main(void)
{
   f(1, 2, 3); //Ok - no errors
   g(1, 2, 3); //compilation error
   return 0;
}
Цитата Сообщение от h3mbr0 Посмотреть сообщение
2) в чем разница между string.h string и cstring?
string.h - описывает функции по работе с Си-строками
string - сожердит класс basic_string
cstring - оборачивает функции из string.h в пространство имен std
последние два хедера - относятся только к С++

Цитата Сообщение от h3mbr0 Посмотреть сообщение
3) почему объявление char s[10]="0123456789"; переполняет массив? ведь с 0 по 9 элемент 10 символов, а 10 - \0?
строки в двойных кавычках автоматически имеют нулевой завершающий символ

Цитата Сообщение от h3mbr0 Посмотреть сообщение
4) для чего нужен экземляр структуры в виде функции? т.е struct func1() {}? чем он отличается от обычной функции?
покажи пример, не совсем ясно что ты имеешь ввиду
1
h3mbr0
296 / 105 / 31
Регистрация: 12.03.2012
Сообщений: 420
09.04.2012, 16:36  [ТС] 3
строки в двойных кавычках автоматически имеют нулевой завершающий символ
но ведь их 10, а элементов с 0 по 10 - 11?
покажи пример, не совсем ясно что ты имеешь ввиду
по книге:
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
34
35
36
37
38
39
40
41
42
43
44
45
struct key
{
char *keyword;
int keycount;
}tab[]={"break",0,
"case",0,
"char",0,
"continue",0,
"end",0
},bbb;
struct key BinaryInStruc(char *word,struct key tab[],int n)
{
int low=0,high=n-1,mid,cond;
while(low<=high)
{
mid=(low+high)/2;
if((cond=strcmp(word,tab[mid].keyword))<0)
high=mid-1;
if(cond<0)
{high=mid-1;continue;}
if(cond>0)
{low=mid+1;continue;}
tab[mid].keyword=0;
return(tab[mid]); //found
}
tab[mid].keycount -1;
return(tab[mid]);//not found
}
//---
int main()
{
char s[1000]
inc c;
do
{printf("enter string>");
getline(s,1000);
bbb=binaryinstruc(s,tab,5);
if(bbb.keycount!=-1) 
printf("Found string =%s\n",bbb.keyword);
else
printf("not found\n");
_getch();
}
while ((c=getchar()) != -1);
}
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.04.2012, 16:39 4
Цитата Сообщение от h3mbr0 Посмотреть сообщение
по книге:
это функция которая возвращает структуру

Цитата Сообщение от h3mbr0 Посмотреть сообщение
но ведь их 10, а элементов с 0 по 10 - 11?
да
1
Mustik
56 / 56 / 6
Регистрация: 10.07.2011
Сообщений: 229
09.04.2012, 16:42 5
Цитата Сообщение от Jupiter Посмотреть сообщение
покажи пример, не совсем ясно что ты имеешь ввиду
Скорее всего он говорит про предикативные объекты.
0
h3mbr0
296 / 105 / 31
Регистрация: 12.03.2012
Сообщений: 420
09.04.2012, 16:43  [ТС] 6
это функция которая возвращает структуру
а обычная функция не может возвратить структуру? разве не проще через указатель?
да
тогда почему если их 11, я ввожу 10+добавляется \0 мне пишет переполнение, хотя их ровно 11?)
0
Mustik
56 / 56 / 6
Регистрация: 10.07.2011
Сообщений: 229
09.04.2012, 16:48 7
Цитата Сообщение от h3mbr0 Посмотреть сообщение
т.е struct func1() {}? чем он отличается от обычной функции?

Не по теме:

коммент удален.

0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.04.2012, 16:49 8
Цитата Сообщение от h3mbr0 Посмотреть сообщение
а обычная функция не может возвратить структуру?
что значит обычная? это и есть обычная функция

Цитата Сообщение от h3mbr0 Посмотреть сообщение
разве не проще через указатель?
проще вообще ничего не возвращать

Цитата Сообщение от h3mbr0 Посмотреть сообщение
тогда почему если их 11, я ввожу 10+добавляется \0 мне пишет переполнение, хотя их ровно 11?)
Цитата Сообщение от h3mbr0 Посмотреть сообщение
но ведь их 10, а элементов с 0 по 10 - 11?
10 символов, но под эти 10 символов отводится 11 ячеек памяти, так понятно?
1
h3mbr0
296 / 105 / 31
Регистрация: 12.03.2012
Сообщений: 420
09.04.2012, 16:52  [ТС] 9
Есть библиотечные функции, которые используют данные так называемые структуры или классы, например, для какой-нибудь операции (сравнение, суммирования и т.д.).
можно поподробнее?
что значит обычная? это и есть обычная функция
а зачем она объявлена как экземпляр структуры key?
10 символов, но под эти 10 символов отводится 11 ячеек памяти, так понятно?
неочень) зачем под 10 отводить 11? что тогда в 11 хранится?
0
Mustik
56 / 56 / 6
Регистрация: 10.07.2011
Сообщений: 229
09.04.2012, 16:54 10
Цитата Сообщение от h3mbr0 Посмотреть сообщение
а зачем она объявлена как экземпляр структуры key?
она так не объявлена, это возвращаемый тип у вас такой.
1
h3mbr0
296 / 105 / 31
Регистрация: 12.03.2012
Сообщений: 420
09.04.2012, 16:59  [ТС] 11
она так не объявлена, это возвращаемый тип у вас такой.
кажется начал понимать)
только недавно структуры начал, просто у автора книги есть особенность: пояснять очевидное и игнорировать непонятное)
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.04.2012, 17:00 12
Цитата Сообщение от h3mbr0 Посмотреть сообщение
а зачем она объявлена как экземпляр структуры key?
C
1
2
3
4
5
6
7
struct mystruct {
    int i;
};
//...
struct mystruct obj;
/* в Си тип obj - struct mystruct - слово "struct" также является 
обязательной частью имени типа. */
C++
1
2
3
4
5
6
7
8
struct mystruct {
    int i;
};
//...
struct mystruct obj;
// в С++ тип obj - mystruct - слово "struct" необязательно, 
// но объявление как в Си - со словом struct тоже допустимо. 
//с классами ситуация аналогична
1
Kuzia domovenok
2354 / 2089 / 494
Регистрация: 25.03.2012
Сообщений: 7,460
Записей в блоге: 1
09.04.2012, 17:00 13
а зачем она объявлена как экземпляр структуры key?
Ну ты и вопросы задаёшь ты ещё спроси, почему
int sum(int x, int y){return x+y;}
объявлена как переменная типа int

int в начале обозначает тип возвращаемого объекта и если мы хотим возвратить из функции структуру
Мы такую функцию объявляем
struct key sum(){...итд

слово (struct key) является типом и может использоваться везде, где используются и встроенные типы (int):
возвращаемые значения функций
передаваемые им аргументы
указатели
и.т.д
1
h3mbr0
296 / 105 / 31
Регистрация: 12.03.2012
Сообщений: 420
09.04.2012, 17:03  [ТС] 14
спасибо, это понял, просто в книге это было описано как создание экземпляра прототипа
а что насчет
неочень) зачем под 10 отводить 11? что тогда в 11 хранится?
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.04.2012, 17:03 15
Цитата Сообщение от h3mbr0 Посмотреть сообщение
неочень) зачем под 10 отводить 11? что тогда в 11 хранится?
11-й символ отводится под завершающий строку символ - 0(всмысле ASCII код этого символа равен нулю)
http://ru.wikipedia.org/wiki/%D0%9F%...BB%D0%BE%D0%B2
http://ru.wikipedia.org/wiki/%D0%A3%...BE%D0%BB%D1%8B
1
h3mbr0
296 / 105 / 31
Регистрация: 12.03.2012
Сообщений: 420
09.04.2012, 17:06  [ТС] 16
11-й символ отводится под завершающий строку символ - 0(всмысле ASCII код этого символа равен нулю)
http://ru.wikipedia.org/wiki/%D0%9F%...BB%D0%BE%D0%B2
http://ru.wikipedia.org/wiki/%D0%A3%...BE%D0%BB%D1%8B
это я знаю, немогу понять почему:
C++
1
char s[5]="1234"
насколько я понял s[0]='1' s[1]='2' s[2]='3' s[3]='4' остаеся еще 2 ячейки, почему нельзя добавить еще один символ?
0
Mustik
56 / 56 / 6
Регистрация: 10.07.2011
Сообщений: 229
09.04.2012, 17:08 17
Цитата Сообщение от h3mbr0 Посмотреть сообщение
это я знаю, немогу понять почему:
C++
1
char s[5]="1234"
насколько я понял s[0]='1' s[1]='2' s[2]='3' s[3]='4' остаеся еще 2 ячейки, почему нельзя добавить еще один символ?
Не 2, а одна ячейка. При объявлении массива s[5], пять - это размер массива, т.е. [0],[1],[2],[3],[4]. Нумерация начинается с нуля. Последний элемент твоего массива будет иметь индекс 4.
1
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.04.2012, 17:09 18
Цитата Сообщение от h3mbr0 Посмотреть сообщение
остаеся еще 2 ячейки, почему нельзя добавить еще один символ?
остается одна ячейка
C++
1
char s[5]="1234"
это массив на пять символов, 1-й символ с индексом ноль, последний с индексом 4
1
3BEPb_TyTa
18 / 18 / 4
Регистрация: 18.05.2010
Сообщений: 83
09.04.2012, 17:11 19
Цитата Сообщение от h3mbr0 Посмотреть сообщение
3) почему объявление char s[10]="0123456789"; переполняет массив? ведь с 0 по 9 элемент 10 символов, а 10 - \0?
если объявить массив так - s[10], то у тебя есть 10 доступных ячеек с индексами от 0 до 9. Вот и получается, что для "012345679" уже нужно 10 ячеек, а нужна ещё одна для '\0'.
1
h3mbr0
296 / 105 / 31
Регистрация: 12.03.2012
Сообщений: 420
09.04.2012, 17:15  [ТС] 20
Вылетело это из головы, считал что s[3] есть s[0],s[1],s[2],s[3] давно массивы проходил) спасибо всем
0
09.04.2012, 17:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.04.2012, 17:15

Void main or Int main
Как правильнее использовать void или int в main? И обязательно возвращать...

От void main() к int main()
Ребят, недавно начал обучаться программированию на cpp на Windows. Перешёл на...

в чем разница между void f(int &n) и void f(int &&n)
:help:


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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