Непонятная работа указателей

rene
Offline
Зарегистрирован: 21.01.2014

Доброго времени суток!

Помогите разобраться с указателем.

void setup() {
  Serial.begin(9600);
  int a = 65535;
  int *b = &a;
  Serial.print((uint16_t)&a);
  Serial.print(":");
  Serial.println(*((byte*)&a));

  Serial.print((uint16_t)&b);
  Serial.print(":");
  Serial.println(*((byte*)&b));
}

void loop() {

}
rene
Offline
Зарегистрирован: 21.01.2014

Извините, случайно нажал сохранить, а как отредактировать первый пост не нашел. Продолжу сдесь...

так вот. Указатель b ссылается на ячейку памяти переменной a, т.е. это должен быть один и тот же адрес, но при выводе этих значений получаю разные адреса памяти:

 

2298:255
2296:250

Что делаю не так?

rene
Offline
Зарегистрирован: 21.01.2014

А, разобрался, надо вот так.

void setup() {
  Serial.begin(9600);
  int a = 65535;
  int *b = &a;
  Serial.print((uint16_t)&a);
  Serial.print(":");
  Serial.println(*((byte*)&a));

  Serial.print((uint16_t)b);
  Serial.print(":");
  Serial.println(*((byte*)b));
}

void loop() {

}
Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

Присваивать знаковому инту 65535 черевато дальнейшей попаболью

rene
Offline
Зарегистрирован: 21.01.2014

Sr.FatCat пишет:

Присваивать знаковому инту 65535 черевато дальнейшей попаболью

Дык этож просто для проверки, чтобы сразу видно было два подряд идущих байта 0xff

Sr.FatCat
Offline
Зарегистрирован: 19.02.2016

rene пишет:

Дык этож просто для проверки, чтобы сразу видно было два подряд идущих байта 0xff


Я просто предупредил. Мне все равно. Это ваши собственные "плохие практики" программирования.
Кто мешал использовать 0xFFFF ?

rene
Offline
Зарегистрирован: 21.01.2014

ок, исправлюсь