Я изучаю C. Когда я проходил там указатели, я заметил странное поведение, которое я не могу понять.При приведении символьного указателя к целочисленному указателю целочисленный указатель содержит какое-то странное значение, не имеющее разумной связи с кодом char или char ascii.Но пока печатается приведенная переменная с помощью «% c», она печатает правильное значение символа.
Печать с использованием «% d» дает некоторые неизвестные числа.
printf("%d", *pt); // prints as unknown integer value that too changes for every run
Но при печати как «% c», тогда
printf("%c", *pt); // prints correct casted char value
Вся программа:
int main() {
char f = 'a';
int *pt = (int *)&f;
printf("%d\n", *pt);
printf("%c\n", *pt);
return 0;
}
Пожалуйста, объясните, как работает приведение символов к типу int и укажите объяснениевыходное значение.
Редактировать:
Если я внесу следующие изменения в программу, то вывод будет таким, как ожидалось.Пожалуйста, объясните это тоже.
#include <stdio.h>
int main() {
char f = 'a';
int *pt = (int *)&f;
printf("%d\n", *pt);
printf("%c\n", *pt);
int val = (int)f;
printf("%d\n", val);
printf("%c", val);
return 0;
}
Вывод:
97
a
97
a
Пожалуйста, объясните это поведение тоже.