Форум программистов, компьютерный форум, киберфорум
Наши страницы

Определение размера массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу равенства двух треугольников по их сторонам http://www.cyberforum.ru/cpp-beginners/thread978031.html
Нужно написать программу для с++ не получается, прошу помощи, и по возможности объясните пожалуйста Стороны одного треугольника равны A1,B1,C1. Написать алгоритм и программу проверки равенства...
C++ Преобразовать полученный текст в набор строк, каждая из которых содержит целое количество слов и ее длинна не превышает 40 символов Преобразовать полученный текст в набор строк, каждая из которых содержит целое количество слов (слово должно целиком находиться в строке) и ее длинна не превышает 40 символов. Подсказки:... http://www.cyberforum.ru/cpp-beginners/thread978027.html
Удаление элементов из списка C++
Создать список. Потом удалить из него все отрицательные элементы. Если можно с комментариями некоторых действий) кстати сдавать программу мне придется на листке бумаги, так что без сильных заморочек...
Сформировать случайным образом массив X(N), элементами которого могут быть только 0 и 1. Проверить, существует ли строгое чередование 0 и 1 C++
Помогите написать прогу C# Сформировать случайным образом массив X(N), элементами которого могут быть только 0 и 1. Проверить, существует ли строгое чередование 0 и 1. Использовать в программе...
C++ Ошибка в ответе http://www.cyberforum.ru/cpp-beginners/thread977948.html
{ int a,b,c,d,f,g,h; double e; printf("Vvedite chetyre chisla: "); scanf("%d%d%d%d",&a,&b,&c,&d); f=a+b; g=b-d; h=c*d; e=(a/c); printf("%d %d %d %lf",f,g,h,e);
C++ При нажатии на бобра не увеличивается счет В игре при нажатии на бобра должен увеличиваться счет (currentCounter), но он почему-то не увеличивается. struct C_Events { C_Events() : currentCounter(0) {} inline void countersIncrement() {... подробнее

Показать сообщение отдельно
Kristobald

Определение размера массива - C++

15.10.2013, 13:56. Просмотров 1037. Ответов 3
Метки (Все метки)

Привет всем у меня несколько вопросов по языку си (компилятор gcc).

1) Есть, например след код:

C
1
2
3
4
5
6
7
char* sym;
char c = 'a';
sym = &c;
*++sym = 'b';
*++sym = '\0';
sym -= 2;
printf ("sym = %s", sym);
Я понимаю, что это извращения, но все же. Здесь как видно, создается указатель на char, далее инициализируется адресом переменной, затем последовательно указатель сдвигается на байт и в ячейку памяти с адресом указателя кладется литерал. Но как это мать его работает без ошибок??? Ведь память выделена только под один символ, а программа пытается записать что-то в неадресованную область памяти! Более того, если мы уберем из программы, пару строчек

C
1
2
3
4
5
6
char* sym;
*sym = 'a';
*++sym = 'b';
*++sym = '\0';
sym -= 2;
printf ("sym = %s", sym);
то она откажется работать, понятно почему, я бы сказал естественно. Ну а в предыдущем примере как так происходит, что не вылетает Segmentation fault (core dumped).

2) Практически та же программа (только чуть модифицированная). Откажемся от правила завершать строку '\0'
C
1
2
3
4
5
6
7
8
9
10
char* sym;
char c = 'a';
sym = &c;
*++sym = 'b';
*++sym = 'c';
*++sym = 'd';
*++sym = 'z';
*++sym = 'x';
sym -= 5;
printf ("sym = %s", sym);
У меня вопрос как printf смог определить размер строки которую надо напечатать, несмотря на то, что символ '\0' в конце не установлен? sizeof здесь не помогает (вернет 4) тогда как??? Значит все-таки есть способ определить длину динамического объекта типа new int (10) без возни с числом 10?

Заранее спасибо, жду комментариев. Эти вопросы ни одна книга не разбирает, было бы очень интересно разобраться!
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru