Странное поведение типа - PullRequest
0 голосов
/ 20 мая 2019

У меня есть этот код:

#include <stdio.h>

int func(unsigned int *a) {
  printf("(func) Value: %d\n", *a);
}

int main() {
  unsigned char a = 255;

  printf("Value: %d\n", a);
  printf("Bytes: %d %d %d %d\n\n", *&a, *(&a + 1), *(&a + 2), *(&a + 3));

  func((unsigned int *) &a);

  return 0;
}

У меня есть вывод этой программы:

Value: 255
Bytes: 255 0 22 234

(func) Value: -367656705

Почему у меня отрицательное значение func, хотя тип без знака int?

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Почему у меня отрицательное значение func, хотя тип имеет тип unsigned int?

int func(unsigned int *a) {
  printf("(func) Value: %d\n", *a);
  //                    ^^
}

Поскольку %d не соответствует типу *a

0 голосов
/ 20 мая 2019

Поскольку sizeof (unsigned char) и sizeof (unsigned int) различаются и также могут зависеть от платформы. Например, беззнаковый символ может быть 1 байтом. int без знака может быть 4 байта. Когда вы выполняете арифметику указателей, вы, возможно, смотрите на другие вещи в кадре стека. С предоставляет вам много веревки, чтобы повеситься.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...