|
655 / 576 / 164
Регистрация: 13.12.2012
Сообщений: 2,126
|
|||||||||||
В чем разница между char* и char[]?01.10.2014, 18:28. Показов 23463. Ответов 69
Метки нет (Все метки)
Доброго времени суток, наткнулся на одну загвоздку есть такой кусок кода
второй норм. Разъясните пожалуйста
0
|
|||||||||||
| 01.10.2014, 18:28 | |
|
Ответы с готовыми решениями:
69
В чем разница между char* и char ** Разница между char и signed char Разница между char[] и char* |
|
|
||
| 02.10.2014, 19:00 | ||
|
C #include <stdio.h> void func (char *p) { p[-2] = 'a'; p[-1] = 'b'; p[0] = 'c'; p[1] = 'd'; p[2] = '\0'; } int main (void) { char c[5]; func (&c[2]); printf ("%s\n", c); return 0; }
2
|
||
|
Модератор
13789 / 10981 / 6492
Регистрация: 18.12.2011
Сообщений: 29,281
|
|
| 02.10.2014, 19:01 | |
|
Эта ошибка рассмотрена в
Распространенные ошибки
0
|
|
|
|
|
| 02.10.2014, 19:02 | |
|
А типизация адреса нужна исключительно для того, чтобы знать, как с этим указателем работать: сколько байт читать/писать за одно обращение к указателю и на сколько байт сдвигать значение в арифметических операциях
1
|
|
|
Комп_Оратор)
|
||
| 02.10.2014, 20:25 | ||
|
Но все типы с перегруженными [] обладают признаком массива. В случае с указателями эта двоякость ещё и подтверждается семантикой: - доступ к элементам одного типа расположенных последовательно... (статические строки и табличную оптимизации не рассматриваем).
0
|
||
|
|
||
| 02.10.2014, 20:47 | ||
|
C int* foo (int *p) { p++; return p; } void bar (void) { long addr1, addr2; addr1 = 0; addr2 = (long) foo ((int*) addr1); }
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||
| 02.10.2014, 21:02 | ||||||||||||
0
|
||||||||||||
|
|
|
| 02.10.2014, 21:03 | |
|
Хотя, я разогнался. По стандарту поинтерные операции определены когда указатели смотрят вовнутрь одного и того же объекта. Т.е. педантично мой пример не корректкен, но в реальной жизни он будет работать вполне конкретным образом
1
|
|
|
Комп_Оратор)
|
||||
| 02.10.2014, 21:45 | ||||
![]() Добавлено через 10 минут
0
|
||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||
| 03.10.2014, 06:51 | ||||||||||||
Добавлено через 1 минуту
Добавлено через 5 минут Это особенность именно языка си и его потомков.
0
|
||||||||||||
|
Комп_Оратор)
|
|||||||
| 03.10.2014, 13:51 | |||||||
А на чары можно рассыпать любой тип, так как точнее уже некуда. И подготовить память под него тоже. Разве нет? Но дело вообще не в этом. Главная особенность в том же что множество библиотек без которых язык беспомощен, работают с указателями на char как с указателями на строку. Поэтому например, печать самого чар-указателя на экран и печать указателя на целое выводят разные вещи.
0
|
|||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||||||||
| 03.10.2014, 14:05 | ||||||||||||||||||
Добавлено через 3 минуты Уж если
0
|
||||||||||||||||||
|
Комп_Оратор)
|
|||||||
| 03.10.2014, 15:23 | |||||||
0
|
|||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 03.10.2014, 16:00 | |
|
Дело не в знаковости, а во встроенной интерпретации. То, что char совмещает роль кода символа, сути меняет. Самим символом он при это остаётся. Этим char отличается от сырого байта.
0
|
|
|
655 / 576 / 164
Регистрация: 13.12.2012
Сообщений: 2,126
|
|
| 03.10.2014, 16:31 [ТС] | |
|
Не по теме: байт 8 бит? 8, char 8 бит? восемь, значит char это байт, и нефиг спорить, просто эти типы интерпретируются по-разному Добавлено через 1 минуту Не по теме: тоже самое как signed и unsigned, просто меняет интерпретацию старшего бита, оба имеют один размер, оба взаимозаменяемы, одна результаты вычислений будут давать разные...
1
|
|
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||||||
| 03.10.2014, 16:40 | ||||||||||||
0
|
||||||||||||
| 03.10.2014, 16:46 [ТС] | |
|
0
|
|
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|||||||
| 03.10.2014, 17:11 | |||||||
|
Если нужно выводить char как число, то его нужно приводить к числу. static_cast<int> например. Иначе как будет выбираться перегруженный оператор << для std::ostream ? В сях тоже тип надо задавать в строке формата:
1
|
|||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
| 03.10.2014, 17:21 | |
|
Вывод такой: в c++ вообще нет сырого байта. В этом языке есть символ, кодированный байтом и зовут его char. А сырого байта нет.
0
|
|
| 03.10.2014, 17:32 | |
|
0
|
|
| 03.10.2014, 18:34 | |
|
Вот какие гарантии даются относительно типов:
Кроме того, гарантируется что под char будет выделено МИНИМУМ 8 бит, int - минимум 16, long - минимум 32.
0
|
|
| 03.10.2014, 18:34 | |
|
(char)xx и '\xx' - в чём разница?
Чем отличается const char* от char*? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|