Не догоняю: указатели в Си

Тема в разделе "WASM.BEGINNERS", создана пользователем exst, 7 мар 2009.

  1. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Доброй ночи. Помогите, пожалуйста разобраться. Решил научиться использовать указатели. Написал вот такие строчки:

    Код (Text):
    1. #include <stdio.h>
    2.  
    3. main()
    4. {
    5.     unsigned int a;
    6.     char *b;
    7.     a = 254;
    8.     b = &a;
    9.     char c = *b;
    10.     printf("Original: %x", a);
    11.     printf("\n");
    12.     printf("Pointer: %x", c);
    13.     printf("\n");
    14.     return 0;
    15. }
    Результат:
    А если a = 256, то все как ожидается:
     
  2. barton

    barton New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2008
    Сообщения:
    164
    Адрес:
    Czechoslovakia
    Компилятор какой?
    Интересно как скомпилилось int * b = &a;, где a - char* и еще
    в С это не скомпилируется:
    объявления переменных надо ставить до кода

    И ещё, почему ты решил, что что-то не так то?
    Ты конвертишь 254 в char и выводишь через %x формат. Чем результат не устраивает? Что ты ожидал там увидеть?
     
  3. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    1)GCC 4.2
    2)А я часто объявляю в коде... не замечал проблем
    3)Ожидал "fe"
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Компилятор расширяет знаковый char с, до знакового int c. А %x беззнаковая.
     
  5. exst

    exst New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2009
    Сообщения:
    91
    Сделал char беззнаковым - ожидания оправдялись)

    Booster, спасибо!