| Название: 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 спасибо :) разобралась! |