Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
Каким образов это ложное(в том смысле что по факту никакого приведения не происходит) приведение типов уводит от рекурсии через саму себя ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 09:12 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
Dima_TЕсли ты изначально объявил одномерный массив, то как компилятор узнает чему равно M ? Всё верно. Теперь понял логику ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 09:29 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryКаким образов это ложное(в том смысле что по факту никакого приведения не происходит) приведение типов уводит от рекурсии через саму себя ? Оно происходит. При компиляции. Соответственно оно не ложное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 09:38 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
Происходит приведение по типу int* к int * ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 09:41 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryПроисходит приведение по типу int* к int * Нет. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 09:47 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
аа, верно. ну да, имя массива это уже указатель int a[1]; int* b=a;//так надо а что я делаю когда пишу int* b=&a;//я пытаюсь записать адрес по которому хранится адрес начала массива a ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 09:52 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryадрес по которому хранится адрес начала массива a слишком много эпитетов. проще надо говорить: указатель на массив :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 10:03 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
int a[300]; int* b=a; // b разве не указатель на массив ? сейчас b содержит адрес первого элемента массива ?? я ведь правильно понимаю ? Я аж испугался что что-то не понимаю, проверил ! Код: plaintext 1. 2. 3. 4. Два абсолютно одинаковых адреса. Вы не до конца что-то мне говорите. Либо я что-то не знаю, а вы думаете что я знаю. Одно из двух на 100 процентов.. Код: plaintext 1. И всё-таки, что тут происходит ? Всем спасибо! Всем хороших выходных C: SS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 10:17 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryДва абсолютно одинаковых адреса. Вы не до конца что-то мне говорите. Либо я что-то не знаю, а вы думаете что я знаю. Одно из двух на 100 процентов.. Есть понятие "тип данных". Один и то же набор байтиков может с точки зрения языка иметь совершенно разный смысл. В данном случае Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 10:45 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Anatoly Moskovsky int a[1]; // массив, имеет тип: int [1] &a; // указатель на массив, имеет тип: int (*)[1] int* b; // указатель на значение, тип int* b = a; // компилятор неявно преобразует из int [1] в int* (поскольку такое преобразование часть языка) b = &a; // компилятор не может неявно преобразовать из int (*)[1] в int* // поскольку такого неявного преобразования в языке нет K&RОчевидно существует очень тесное соответствие между индексацией и арифметикой указателей. в действительности компилятор преобразует ссылку на массив в указатель на начало массива. В результате этого имя массива является указательным выражением. И теперь исходя из комментария от K&R ваша запись b = &a; Вообще не имеет никакого смысла. Исходя из того что я знаю. Например запись Код: plaintext 1. 2. 3. 4. 5. ясны и несут очевидный смысл. Когда мне может понадобиться b = &a; ? И SashaMercuryКаким образов это приведение типов уводит от рекурсии через саму себя ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 01:51 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryИ теперь исходя из комментария от K&R ваша запись b = &a; Вообще не имеет никакого смысла. Исходя из того что я знаю. Зачем вы мне это говорите, когда я выше написал Код: plaintext 1. Что непонятно в слове "не откомпилируется"? SashaMercuryКаким образов это приведение типов уводит от рекурсии через саму себя ? Формула вычисления элемента массива ссылалась на вычисление 0-го элемента - что является рекурсией (бесконечной). Чтобы устранить рекурсию, 0-й элемент вычисляется по-другому - приведением адреса массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 07:28 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
Я перечитал ваше сообщение Anatoly MoskovskyТаким образом получаем: *(&a[0] + x) Да, тут забыл еще одно преобразование, для устранения рекурсии определения [], через самого себя. Адрес 0-го элемента &a[0] вычисляется так (element_type *)&a (т.к. адрес массива и 0-го элемента совпадают в физическом представлении) Т.е. итоговая формула такая: *((element_type *)&a + x) с учётом того что выв мне написали сегодня Ооооо!! Я понял, мне это нравится !!!! Я его полностью понял, от рекурсии до каждой скобки! Очень хорошее выражение, теперь мне оно очень нравится !))) Мне кажется вместо всяких тестов на знание Си, можно показать это выражение ( и ещё плюс тот отличнейший пример от Дмитрия), и понять понимает ли человек язык хотя бы средне или нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 08:23 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
Сегодня с трудом заснул, думал про эту формулу. Насколько тут всё здорово. Anatoly Moskovsky, а где вы это прочитали ? Что компилятор так преобразует ? Может я что-то завышаю, но я на 90 процентов уверен, что если спросить 100 среднестатистических программистов почему int a[x]~*((element_type_x*)&a+x), то ответит максимум 5. K&R ещё не до конца изучил, неужели дальше это будет ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 02:02 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
под тильдой я имел ввиду эквивалентность как математический символ, а не оператор C ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 02:03 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryя на 90 процентов уверен, что если спросить 100 среднестатистических программистов почему int a[x]~*((element_type_x*)&a+x), то ответит максимум 5. Обычно начинающих сильнее ставит в тупик вопрос "почему (int*)0 + 1 == 4". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 02:56 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
У меня следующее предположение, 0 приводится к указателю, и при добавлении единички работает арифметика указателей, то есть добавляют 4 байта на int, и возвращается 4.Возникает два вопроса 1)Почему (int*)a=a (где а in Z, не переменная) 2)почему возможен возврат числа не кратному 4, но видимо ответ из 1 вопроса Если мне есть ещё смысл думать, то я подумаю, если я вообще не в ту степь смотрю, то вы лучше подскажите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 06:20 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
f e: printf("%i",(int*)17+10 ); вернёт 57 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 06:21 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryУ меня следующее предположение, 0 приводится к указателю, и при добавлении единички работает арифметика указателей, то есть добавляют 4 байта на int, и возвращается 4.Возникает два вопроса 1)Почему (int*)a=a (где а in Z, не переменная) не понял о чем речь SashaMercury2)почему возможен возврат числа не кратному 4, но видимо ответ из 1 вопроса если ты про это SashaMercuryf e: printf("%i",(int*)17+10 ); вернёт 57 то все верно: (int*)17 - указатель на байт памяти с адресом 17. Нет никаких ограничений чтобы начальный адрес был кратен 4. Память адресуется побайтно. +10 как ты уже понял 10 раз по 4 байта (sizeof(int)). SashaMercuryЕсли мне есть ещё смысл думать, то я подумаю, если я вообще не в ту степь смотрю, то вы лучше подскажите Наверно есть смысл прекращать теорию изучать и написать что-нибудь простое, для закрепления теории на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 07:24 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SS Дайте какое-нибудь задание C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 07:41 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SSПочему (int*)a=a (где а in Z, не переменная a in Z, это как в Tex, число "а" принадлежит целым числам, но не переменная, то есть не объявлена как int a; f e: (int*)100. 100-это и есть a Dima_TНаверно есть смысл прекращать теорию изучать и написать что-нибудь простое, для закрепления теории на практике. Дайте какое-нибудь задание C: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 07:43 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercurySSПочему (int*)a=a (где а in Z, не переменная a in Z, это как в Tex, число "а" принадлежит целым числам, но не переменная, то есть не объявлена как int a; f e: (int*)100. 100-это и есть a Код: plaintext 1. В реальном коде такого не надо писать. Это запись в ячейки памяти с адресами 100, 101, 102, 103. Уже как-то писал что в реальном коде такое невозможно, т.к. конкретные адреса в памяти выделяются ОС и программа работает с теми адресами что ей дали, поэтому конкретное значение указателя нужно только для сравнения его с другим указателем на тот же массив. SashaMercuryДайте какое-нибудь задание C: В книжках ничего нет? Напиши что-нибудь классическое с использованием указателей. Например сортировка массива и двоичный поиск по нему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 08:50 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ его полностью понял SashaMercuryСегодня с трудом заснул, думал про эту формулу Предлагаю для проверки понимания перед сном подумать над тем как будет вычислено выражение: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 10:22 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
Я вышел из дома, компилятора тут нет, только C# к сожалению. Попробую предположить. 3["abcdef"]. Видим операцию [], значит получим *(3+"abcdef")..мне кажется что abcdef запишется в памяти в соответствии с ASCII, и будет прочитано число как int.Хотя стоп, это 6 байт,а int 4 байта.Нет. Вероятнее добавится 6 байт, даже 7, ещё конец массива. На выходе будет 10. Верно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 14:49 |
|
||
|
K&R Многомерные массивы
|
|||
|---|---|---|---|
|
#18+
SashaMercuryЯ вышел из дома, компилятора тут нет, только C# к сожалению. Попробую предположить. 3["abcdef"]. Видим операцию [], значит получим *(3+"abcdef")..мне кажется что abcdef запишется в памяти в соответствии с ASCII, и будет прочитано число как int.Хотя стоп, это 6 байт,а int 4 байта.Нет. Вероятнее добавится 6 байт, даже 7, ещё конец массива. На выходе будет 10. Верно ? Нет. Подумай, какого типа и значения выражение Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2014, 15:40 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38556583&tid=2019679]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
65ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 166ms |

| 0 / 0 |
