А>Что означает этот код, когда мы прибавляем integer к структуре? Если учесть что tree_node это не массив структур.
Видишь звездочку? Это значит, что tree_node_2 — это не структура, а указатель (адрес).
Так что ты прибавляешь integer не к структуре, а к адресу, т.е. просто получаешь адрес, увеличенный на k размеров структуры.
А>>Что означает этот код, когда мы прибавляем integer к структуре? Если учесть что tree_node это не массив структур. J>Видишь звездочку? Это значит, что tree_node_2 — это не структура, а указатель (адрес). J>Так что ты прибавляешь integer не к структуре, а к адресу, т.е. просто получаешь адрес, увеличенный на k размеров структуры.
вот этого я и не понял
структуры в памяти не последовательны т.к. это не массив структур. и перед этим выделялись пo malloc(). кроме того я увеличиваю на число, а не на sizeof(tree_node*)
А>Что означает этот код, когда мы прибавляем integer к структуре? Если учесть что tree_node это не массив структур.
Это не к структуре прибавляется, а к указателю. Видимо предполагается, что в функцию попадает указатель на массив структур.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, jhdffhg85hdgg5r, Вы писали:
J>>Так что ты прибавляешь integer не к структуре, а к адресу, т.е. просто получаешь адрес, увеличенный на k размеров структуры.
J>вот этого я и не понял J>структуры в памяти не последовательны т.к. это не массив структур. и перед этим выделялись пo malloc(). кроме того я увеличиваю на число, а не на sizeof(tree_node*)
А что и когда выделялось — это уже другой вопрос. Если не было выделено место, просто получится указатель на невыделенную область памяти. Тут уж программист должен следить за этим (собственно, отсюда и всевозможные проблемы переполнения буфера).
Инкремент указателя на число увеличивает его именно на указанное количество размеров структур, а не байтов. Если требуется сдвинуть именно на несколько байтов, нужно сначала привести указатель к типу void*.
Здравствуйте, CaptainFlint, Вы писали:
CF>Здравствуйте, jhdffhg85hdgg5r, Вы писали:
J>>>Так что ты прибавляешь integer не к структуре, а к адресу, т.е. просто получаешь адрес, увеличенный на k размеров структуры.
J>>вот этого я и не понял J>>структуры в памяти не последовательны т.к. это не массив структур. и перед этим выделялись пo malloc(). кроме того я увеличиваю на число, а не на sizeof(tree_node*)
CF>А что и когда выделялось — это уже другой вопрос. Если не было выделено место, просто получится указатель на невыделенную область памяти. Тут уж программист должен следить за этим (собственно, отсюда и всевозможные проблемы переполнения буфера). CF>Инкремент указателя на число увеличивает его именно на указанное количество размеров структур, а не байтов. Если требуется сдвинуть именно на несколько байтов, нужно сначала привести указатель к типу void*.
Выделенное, к сожалению, неверно. Арифметика указателей с типом void* запрещена. Надо приводить к char*, который по стандарту размером в 1 байт.
Здравствуйте, Мишень-сан, Вы писали:
МС>Выделенное, к сожалению, неверно. Арифметика указателей с типом void* запрещена. Надо приводить к char*, который по стандарту размером в 1 байт.
Странно, gcc 4.5.0 нормально компилит (хотя даёт ворнинг). Ладно, на будущее буду иметь в виду (хотя вряд ли мне понадобится сдвигать указатель побайтово ). Спасибо за поправку.
А>>Что означает этот код, когда мы прибавляем integer к структуре? Если учесть что tree_node это не массив структур. LVV>Это не к структуре прибавляется, а к указателю. Видимо предполагается, что в функцию попадает указатель на массив структур.
небрежно просмотрел код, там действительно оказался массив указателей на структуры, спрятанный в макросах. всем спасибо за участие.