|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.08.2010, 12:48 | #21 |
Пользователь
Регистрация: 06.10.2009
Сообщений: 35
|
пишем слово, программа пишет слово в обратную сторону и скажет размер массива
Код:
Суть в том что как бы массив не увеличивать, sizeof говорит размер указаный при создании массива.Извеняюсь код кривой выложил не посмотрел))) Код:
|
23.08.2010, 14:09 | #22 |
Пользователь
Регистрация: 28.07.2010
Сообщений: 43
|
А, да, я ошибся - не учёл, что в случае массивов символов sizeof даёт размер, и в цикле проверку на нулевой символ. Всё таки я не понимаю одного, хоть и всё работать должно, почему такой способ сложный, я-бы сказал, странноватый?
|
23.08.2010, 14:53 | #23 | ||
Пользователь
Регистрация: 06.10.2009
Сообщений: 35
|
Цитата:
Цитата:
так всё таки почему sizeof так врёт ?) |
||
23.08.2010, 14:59 | #24 |
Пользователь
Регистрация: 28.07.2010
Сообщений: 43
|
нет, погоди, sizeof не врёт. Массив статический, нельзя изменить его размер. Какой создал - такой и до конца.
|
23.08.2010, 15:15 | #25 |
Пользователь
Регистрация: 06.10.2009
Сообщений: 35
|
char mas[1]; // говорим что массив будет с 1 элементом
дальше если пишем слово "привет",то массив увеличивается по идее mas[0]='п'; mas[1]='р'; mas[2]='и'; mas[3]='в'; mas[4]='е'; mas[5]='т'; но sizeof всё равно говорит что массив с 1 элементом |
23.08.2010, 15:25 | #26 |
Я
Форумчанин
Регистрация: 24.04.2010
Сообщений: 693
|
Правильно, было выделено памяти для одного элемента (поэтому sizeof и пишет 1), а все остальное уже выход за предел массива. Если компилятор не увидел ошибки, ошибка может выявиться в любом месте программы и найти ее будет непросто.
Та область где содержатся "ривет" считается свободной, поэтому она может использоваться в других целях. Допустим, выделяем память где-нибудь в другой части программы, эта область может выбелиться для другой переменной, а после этого обращение к mas[2] будет уже недоступно
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©. |
23.08.2010, 15:30 | #27 |
Пользователь
Регистрация: 22.04.2010
Сообщений: 96
|
Правильно, потому что размер массива задается во время компиляции, и дальше его изменить нельзя.
include <Qt>
|
24.08.2010, 19:48 | #28 |
Пользователь
Регистрация: 06.10.2009
Сообщений: 35
|
блин ну и c++ путаниться
пример из книги: Код:
s- ведь массив, по идее строка while (*s !='\0') говорит пока массив (то-есть весь массива не его элемент) не будет иметь значения \0 и дальше в функции "*s" не массив а как будто его элемент, почему он вообще ошибку не выдал как так... далее.... s=s+1; - тут вообще что за ерунда, ради интереса проверил cout << s; выдал тоже символ (я запутался) ну и каким то чудесным образом не символ изменяеться на +1 , а переходим к следущему элементу *s! не понятно.....!!!!!!!!! |
24.08.2010, 20:10 | #29 |
Пользователь
Регистрация: 28.07.2010
Сообщений: 43
|
Что тут непонятного? s - это массив. Имя массива является указателем, в данном случае указателем на char, тобиш на символ. Далее, строка в с - это последовательность символов, заканчивающаяся нулевым символом (символ с кодом 0 - нуль-терминатор), записывается символ нулевой так '\0' или просто 0 без кавычек, поэтому цикл и работает.
в случае указателей операции инкремента, декремента, а так-же сложения и вычитания работают так: прибавление к указателю числа сдвигает его на это число размеров типа, на который указвает указатель , то есть на количество элементов массива. *s - это разыменованный указатель, то есть то, что хранится по указанному адресу, указатель тут на чар, следовательно и лежит там символ, дальше указатель сдвигается на один элемент вправо и цикл повторяется. |
24.08.2010, 20:28 | #30 |
Пользователь
Регистрация: 22.04.2010
Сообщений: 96
|
Почитайте Керниган & Ричи.
include <Qt>
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
rand в С | Jasper92 | Общие вопросы C/C++ | 1 | 02.04.2010 16:01 |
rand | VAN32 | Общие вопросы C/C++ | 5 | 07.03.2010 21:38 |
SizeOf выдает значение на порядок меньше. | Alex Cones | Общие вопросы Delphi | 4 | 15.01.2010 21:24 |
rand() ????? | Revenholm | Общие вопросы C/C++ | 7 | 25.04.2009 18:47 |
как узнать ip адрес зная mac адрес | Roman | Работа с сетью в Delphi | 9 | 25.06.2007 12:39 |