654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
|
|||||||||||
1 | |||||||||||
В чем разница между char* и char[]?01.10.2014, 18:28. Показов 21141. Ответов 69
Метки нет (Все метки)
Доброго времени суток, наткнулся на одну загвоздку есть такой кусок кода
второй норм. Разъясните пожалуйста
0
|
01.10.2014, 18:28 | |
Ответы с готовыми решениями:
69
В чем разница между char* и char ** Разница между char и signed char Разница между char[] и char* Разница между new char[] и new char[]() |
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
03.10.2014, 19:09 | 61 |
Про биты в стандарте нет ничего конкретного. Стандарт гарантирует ,что sizeof(char) == 1 (байт) и все. Вышеприведенные неравенства этому не противоречат. А байт гипотетически может быть какой угодно разрядности, не обязательно 8 бит (например запросто может быть 7 бит, и даже 6 бит). Модель типов С и С++ запросто ложится на машины с такой разрядностью байта.
Добавлено через 2 минуты Это тоже неверно. Посмотри на неравенство, которое ты привел. Ситуация, когда sizeof(char) == sizeof(long) вполне реальна.
0
|
03.10.2014, 19:30 | 63 |
выдержка из стандарта раз
выдержка из стандарта два Добавлено через 2 минуты Исходя из написанного выше - нет. Правда опять ломает во всё это вникать, в каком стандарте чего появилось, но в современных стандартах таких случаев уже не положено
2
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
03.10.2014, 19:53 | 64 |
К сожалению эта информация расходится с тем, что написано в стандарте.
В третьем издании действительно написано именно это. Рискну предположить, что для простоты изложения. К слову, в четвертом издании (которое на русском еще не издавалось) этот параграф переработан и эти спорные утверждения убраны (все, кроме утверждения о восьмибитности char, в самом же стандарте про это нет ни слова). Можешь сам почитать, если сомневаешься, параграф: 3.9.1 Fundamental types. Добавлено через 10 минут Хорошо. Согласен, я не прав. Жаль только это расходится с практикой. Получается, что компилятор С для машины с семибитным байтом не может существовать в принципе.
0
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
03.10.2014, 20:53 | 66 |
В свою защиту могу сказать, что стандарт С++ действительно нигде не упоминает соответствующие ограничения прямым текстом. Есть только сноска на стандарт С.
Добавлено через 2 минуты Да спасибо. Это теперь уже не важно. Стандарт С, оказывается все разъясняет, а С++ просто на него ссылается, поэтому там и нет этой информации прямым текстом. Добавлено через 40 минут С учетом того, что я был не прав насчет минимального порога, то насчет максимального порога все стыкуется. Т.е. ситуация, когда sizeof(char) == sizeof(int) действительно вполне реальна и не противоречит ничему вышесказанному, в случае, когда sizeof(char) == 4 или 8. Как пример можно привести множество современных DSP, например Texas Instruments DSP TMS32F28xx, где CHAR_BIT=16.
1
|
18848 / 9847 / 2408
Регистрация: 30.01.2014
Сообщений: 17,290
|
|
03.10.2014, 21:19 | 68 |
Я некорректно выразился.
Имел в виду CHAR_BIT=16 и CHAR_BIT=32. sizeof(char) конечно же всегда равен 1, разрядность самого char при этом может быть больше восьми бит. Я поздно заметил ошибку, исправить уже не смог
0
|
03.10.2014, 23:53 | 69 |
Да. Просто в очередной раз запутался в идиотской формулировке о минимально размере максимальной величины. Для DSP делают, например, 32-битный char, а типы short, int, long совпадают с char'ом. У у всех sizeof == 1
Думаю, что может. А пользователям такой машины будет пофиг, что компилятор не совсем по стандарту работает
0
|
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
04.10.2014, 09:31 | 70 |
Кем гарантировано?
Добавлено через 19 минут 96-ти битный байт его утверждению тоже не противоречит. Главное слово у него - "минимум". Но и это не верно. ASCII - это вообщето 7-ми битная кодировка, а не 8-ми. И то, что ни кто не стал делать байт, разрядность которого не равна целой степени двойки, ничего не гарантирует. Трайт на сетуне 6 трит вместо девяти, так что в принципе могли сделать и 7. И ни 48, ни 96 бит - тоже нифига не целые степени двойки. Пришли к степеням двойки, а 7 так и не сделали? Эйси. 4 - тоже целая степень двойки и четырёхбитные шины реально существовали. Да, тот процессор байты всё таки имел по 8 бит штука, а по шине гонял пары полубайт. А кто сказал, что нельзя сделать по другому? Символы можно кодировать и несколькими байтами. Например, двумя. Да и снова отойти от степеней двойки для какой нибудь экзотической, не нуждающейся в совместимости платформы тоже можно. Семи бит для символа достаточно. А если ещё и с алфавитом не надо работать, если достаточно цифр, точки, пробела и арифметических знаков, то и четырёх хватит: 10 цифр + 1 пробел + 4 знака операций + 1 точка = 16, . Вопрос целесообразности роняет лишь вероятность подобных вроде бы глупостей, но ни как не гарантирует от таких байтов. Особенно если учесть зоопарк эмуляторов и виртуальных машин, для которых тоже можно делать кроскомпиляторы c/c++. Добавлено через 16 минут Да, кстати, существует целый форум энтузиастов, пытающихся снова создать троичный комп, так там ни битов, ни байтов не будет. А с какого перепегу там будут запрещены c/c++?
0
|
04.10.2014, 09:31 | |
04.10.2014, 09:31 | |
Помогаю со студенческими работами здесь
70
(char)xx и '\xx' - в чём разница? Разница между char и int Строка: чем отличается строки string, char, char*? Чем отличается const char* от char*? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |