Название: GetFParams()[1] непонятно) Отправлено: IzoLda от Март 23, 2012, 13:09 имеется функция, возвращающая указатель на целое...также структура на элемент экземпляра которого он обращается.
Код: const u_int16* GetFParams(){ return Obj->Struct->FParams;}; Название: Re: GetFParams()[1] непонятно) Отправлено: Kurles от Март 23, 2012, 13:25 Как известно в С массив - суть указатель, следовательно правая часть обращается к второму значению массива FParams в структуре.
Название: Re: GetFParams()[1] непонятно) Отправлено: Igors от Март 23, 2012, 13:29 Указатель и массив в С - одно и то же (почти).
Код Однако обратите внимание: в структуре массив имеет 1 элемент, поэтому o.GetFParams()[0] правильно а o.GetFParams()[1] вернет мусор (некорректное значение) за пределами TMStructObj - а может и вылететь. Но так может быть сделано умышленно - "хвост" используется как массив переменной длины. Напр Код Так я "отрастил хвост" (5 элементов) и могу его использовать Тут щас набегут теоретики (мол, "это очень плохой стиль" и все такое) - но Вы их особо не слушайте :) Название: Re: GetFParams()[1] непонятно) Отправлено: LisandreL от Март 23, 2012, 13:30 следовательно правая часть обращается к второму значению массива FParams в структуре. Ко второму значению, которого нет. :) То есть просто читает 2 байта, которые лежат в памяти после этой структуры.Название: Re: GetFParams()[1] непонятно) Отправлено: mutineer от Март 23, 2012, 13:31 o.GetFParams()[1] вернет мусор (некорректное значение) за пределами TMStructObj - а может и вылететь. А в каком случае может вылететь от попытки чтения адреса, следующего за валидным? Название: Re: GetFParams()[1] непонятно) Отправлено: Igors от Март 23, 2012, 13:33 А в каком случае может вылететь от попытки чтения адреса, следующего за валидным? Если адрес пересек границу страницыНазвание: Re: GetFParams()[1] непонятно) Отправлено: IzoLda от Март 23, 2012, 13:48 видимо про адресное пространство мне следует почитать...на счет наращивания хвоста, не совсем понятно в какой момент и где это наращивается?
Название: Re: GetFParams()[1] непонятно) Отправлено: Igors от Март 23, 2012, 14:04 видимо про адресное пространство мне следует почитать...на счет наращивания хвоста, не совсем понятно в какой момент и где это наращивается? В момент распределения TMStructObj, т.е. Вы можете создать указатели на нее напр один с 10 элементами, др с 20 и.т.п. После того как структура распределена размер хвоста уже не изменить (для созданного экземпляра). Часто (как правило) реальное число элементов записывается в саму структуруНазвание: Re: GetFParams()[1] непонятно) Отправлено: IzoLda от Март 23, 2012, 14:37 спасибо :) разобралась!
|