· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Pointer

. 1 . 2 . >>

Посл.отвђт Сообщен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 (если в опциях компилятора не установлено, что все charunsigned).


Дата: Июн 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
...
15 The three types char, signed char, and unsigned char are collectively called the character types. The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char.


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?

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.099