powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / K&R Многомерные массивы
16 сообщений из 66, страница 3 из 3
K&R Многомерные массивы
    #38558157
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury3+97 значит.Адрес сдвинется на 97. Вернёт 100.Проверил уже.
Неа, это еще бредовее предыдущей попытки угадать :)

Подсказка:
Строковый литерал в С - это массив char.
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38558159
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryВернёт 100.Проверил уже
Вопрос был не что вернет, а как вычисляется :)
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38559352
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так ?

3["abcdef"]=3[array]=*(3+array)=*(3+(int*)array)=*(3+(int*)(&array[0]))=100
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38559545
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercury,

здесь тебе только стандарт поможет

во-первых, тебе потребуется определение []

Код: plaintext
1.
a[b] = *(a+b) = *(b+a) = b[a]



во-вторых, правила адресной арифметики

Код: plaintext
1.
2.
3.
4.
T* add(T* p, size_t offset) {

   return (T*)((void*)p+offset*sizeof(T));
}


итого

Код: plaintext
1.
3["abcdef"] = *(3+"abcdef") = *("abcdef" + 3)  = "abcdef"[3] = 'd' 



откуда 100?
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38559595
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широковоткуда 100?
ASCII код 'd' = 100
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38559609
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

да, ступил :) просто смутили манипуляции товарища с (int*) где его в принципе нет :)
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38559979
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, я немного понял.

Анатолий Широков 3["abcdef"] = *(3+"abcdef") = *("abcdef" + 3) = "abcdef"[3] = 'd'


Распишите более подробно пожалуйста, где происходит приведение к int*


Анатолий Широковa[b] = *(a+b) = *(b+a) = b[a]


Возможна такая ситуация что смысл будет иметь и *(a+b) и *(b+a). Я не придумал, но возможно 3[5], вернёт видимо 3+20 либо 3+12.
Не могу проверить и оценить, буквально с закрытыми глазами уже печатаю.
Это очень интересно. Мне нравится что это напоминает норму элемента в пространстве в функане. Интересно, а где дано математическое обоснование указателей ?
И откуда вы всё это узнали ?Это есть в K&R ?

Сегодня спросил у знакомого, он хвастался что прилично соображает в Си, он сказал что будет ошибка компиляции, но я то знал что будет =^_^=
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38559997
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо C:
Пример жутко хороший )))
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38560003
SS_phone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Оно нигде не происходит, это я вывожу в таком формате
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38560020
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЯ не придумал, но возможно 3[5], вернёт видимо 3+20 либо 3+12
Все еще нет понимания.
Разбирайтесь заново :)
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38560037
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryСпасибо, я немного понял.

Распишите более подробно пожалуйста, где происходит приведение к int*


нет здесь вообще приведения к int* нигде.

SashaMercury
Возможна такая ситуация что смысл будет иметь и *(a+b) и *(b+a). Я не придумал, но возможно 3[5], вернёт видимо 3+20 либо 3+12.


не возможна, а узнают это в первоисточнике - стандарте С/С++
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38560380
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryЯ не придумал, но возможно
Код: plaintext
1.
3[5]

, вернёт видимо 3+20 либо 3+12
Все еще нет понимания.
Разбирайтесь заново :)

Саша, всё настолько просто, что ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
ziv@mole:~/tmp$ cat a.c
 [code=plaintext]
#include <stdio.h>

int main()
{
  void *a = (void*) (3);
  printf( "%u: 3[5] = %u, 5[3] = %u \n", sizeof(a[0]), (unsigned)(&a[5]), (unsigned)(&5[a]) );

  char *a1 = (char*) (3);
  printf( "%u: 3[5] = %u, 5[3] = %u \n", sizeof(a1[0]), (unsigned)(&a1[5]), (unsigned)(&5[a1]) );

  short *a2 = (short*) (3);
  printf( "%u: 3[5] = %u, 5[3] = %u \n", sizeof(a2[0]), (unsigned)(&a2[5]), (unsigned)(&5[a2]) );

  int *a3 = (int*) (3);
  printf( "%u: 3[5] = %u, 5[3] = %u \n", sizeof(a3[0]), (unsigned)(&a3[5]), (unsigned)(&5[a3]) );

  double *a4 = (double*) (3);
  printf( "%u: 3[5] = %u, 5[3] = %u \n", sizeof(a4[0]), (unsigned)(&a4[5]), (unsigned)(&5[a4]) );

  return 0;
}


ziv@mole:~/tmp$ gcc -w -oa a.c && ./a
1: 3[5] = 8, 5[3] = 8
1: 3[5] = 8, 5[3] = 8
2: 3[5] = 13, 5[3] = 13
4: 3[5] = 23, 5[3] = 23
8: 3[5] = 43, 5[3] = 43
ziv@mole:~/tmp$


...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38560554
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я понял.. перед сном и написал что приведение не происходит. в формате i вывожу, потому 100

SS_phoneОно нигде не происходит, это я вывожу в таком формате


Я хотел скачать стандарт С/С++ , но он платный. Подскажите ссылку, пожалуйста
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38560566
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экспериментировал. например 3[&"abcdef"] вернёт адрес третьего элемента массива char, то есть адрес d.
&abc[2] так значит тоже можно писать.

3[&"abcdef"]=*(3+&"abcdef")=*(&"abcdef"+3)=&"abcdef"[3]=Дальше по идее должно быть =&*("abcdef"+3). но что-то мне не нравится.
Сначала прочитаю стандарт потом буду размышлять.
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38560766
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryЭкспериментировал. например 3[&"abcdef"] вернёт адрес третьего элемента массива char, то есть адрес d.
&abc[2] так значит тоже можно писать.

Тут только не надо забывать что
Код: plaintext
1.
&abc[2]


означает
Код: plaintext
1.
&(abc[2])


а не
Код: plaintext
1.
(&abc)[2]



SashaMercuryЯ хотел скачать стандарт С/С++ , но он платный. Подскажите ссылку, пожалуйста
Сами стандарты платные, но доступны последние черновики стандартов, которые ничем кроме названия и некоторых мелочей не отличаются. Ну и иногда в инете валяются и собственно стандарты :)
Ниже привожу ссылки либо на черновик (на сайте стандартов open-std) либо на стандарт (на других сайтах) .

С99: http://cs.nyu.edu/courses/fall12/CSCI-GA.2110-001/downloads/C99.pdf
C11: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
С++03: http://cs.nyu.edu/courses/fall11/CSCI-GA.2110-003/documents/c 2003std.pdf
С++11: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3242.pdf
С++14 (еще не принят): http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3797.pdf
...
Рейтинг: 0 / 0
K&R Многомерные массивы
    #38562577
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, здравствуйте.

Черновики стандартов сейчас скачал, спасибо)
...
Рейтинг: 0 / 0
16 сообщений из 66, страница 3 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / K&R Многомерные массивы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]