|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 9, 2004 11:59:39 Натворил на Си прогу и вот что меня повергло в шок. В указателе хранится адрес другой и переменной и при инкрементирование значение адреса должно увеличится на еденицу, а увеличилось аж на целых 4! Далее декре- ментирую, уменьшается на 4! Делал инкремент через асм тот же результат. В чем прикол понять не могу. Может кто объснит мне эту мистику? _851524426_____.cpp |
|
|
Дата: Июн 9, 2004 12:17:18 lea edx,p add edx,1 mov p,edx но ведь P - это переменная, у которой значение - указатель ,а lea - вернет указатель на эту переменную. Не lea, а mov. |
|
|
Дата: Июн 9, 2004 12:35:11 EvilsInterrupt В Си/С++ типизированные указатели интеллектуальны, вполне логично, что при инкременте/декременте они меняют свое значение на sizeof(type), это же справедливо если величина инкремента/декремента больше единицы – sizeof(type) * величина_изменения. |
|
|
Дата: Июн 9, 2004 13:13:53 q_q Долго думал, но что то не понял. Вернее понял, но не до ясного понимания! |
|
|
Дата: Июн 9, 2004 13:16:51 PavPS я хочу получить доступ ко второму, третьему байты этой переменной. Посмотри код, вроде ясно выложил и писал читабельно. |
|
|
Дата: Июн 9, 2004 13:23:20 EvilsInterrupt Дык q_q правильно сказал. Это написано практически в любой книжке по Си, а также и в стандартах языка. |
|
|
Дата: Июн 9, 2004 13:43:58 EvilsInterrupt *(((char*)p)+n) |
|
|
Дата: Июн 10, 2004 03:53:20 Black_mirror char - это signed byte (если в опциях компилятора не установлено, что все char'ы unsigned). |
|
|
Дата: Июн 10, 2004 10:57:07 · Поправил: Black_mirror q_q Со знаком char в VС, а вообще стандарт не определяет со знаком он или без, оставляя это на усмотрение разработчиков компилятора. |
|
|
Дата: Июн 10, 2004 11:46:41 Black_mirror Я к тому, что EvilsInterrupt "хочу получить доступ ко второму, третьему байты", а байт по смыслу ближе к unsigned char. а вообще стандарт не определяет Неверно. |
|
|
Дата: Июн 10, 2004 21:34:07 q_q Да ты не умничай, ты пальцем покажи! (с)анекдот hint: если стандарт определяет, то зачем нужна опция компилятора? |
|
|
Дата: Июн 10, 2004 23:51:08 А я почитаю да уму разуму по набирусь, а вы продолжайте я вас с превеликим удовольствием читаю! |
|
|
Дата: Июн 11, 2004 04:35:57 captain cobalt ты пальцем покажи INTERNATIONAL STANDARD ISO/IEC 9899 Second edition 1999-12-01. Programming languages — C 6.2.5 Types INTERNATIONAL STANDARD ISO/IEC 14882 First edition 1998-09-01. Programming languages — C++. Characters can be explicitly declared unsigned or signed. Plain char, signed char, and unsigned char are three distinct types. зачем нужна опция компилятора Например, для сокращения размера исходного текста. #include <stdio.h>
int main(void)
{
char c = '\0';
unsigned char uc = '\0';
c--;
uc--;
printf("c = %d\nuc = %d\n", c, uc);
return 0;
}В результатеc = -1 uc = 255 |
|
|
Дата: Июн 11, 2004 12:21:23 q_q The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char Ну и где здесь написано что по умолчанию char должен быть со знаком? |
|
|
Дата: Июн 11, 2004 14:27:49 Black_mirror а вообще стандарт не определяет ... Ну и где здесь написано... Ты ведешь к тому, что существуют компиляторы C/C++, в которых необходимо писать signed char иначе компилятор без дополнительных опций/ключей подразумевает char беззнаковым? Imho это абсурд, потому что char наравне с short, int, long относится к целым типам. По-твоему существуют компиляторы, в которых для char может быть сделано исключение, т.е. компилятор рассматривает char, как беззнаковый, а остальные целые типы как знаковые, или остальные целые типы тоже беззнаковые и для уведомления компилятора обязательно надо указывать signed? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.099 |