здесь программа:Почему этот оператор печати изменяет предыдущий указатель?
#include <stdio.h>
main() {
int * i;
int * j;
printf("%d\n", i);
printf("%d\n", j);
}
Я скомпилировал и запустил его, и выход был:
888086464
0
Однако, если я закомментировать второй PRINTF
#include <stdio.h>
main() {
int * i;
int * j;
printf("%d\n", i);
//printf("%d\n", j);
}
затраченные положить:
0
Мне интересно, почему второй printf меняет указатель i.
И, как C инициализирует указатели? Насколько я знаю, если указатель не инициализирован, он будет иметь значение Null, равное 0, правильно? Почему в первом выпуске i был инициализирован?
EDIT: После предложения от вас, ребята, я сделал некоторые изменения:
#include <stdio.h>
main() {
int * i;
int * j;
printf("%p\n", i);
printf("%p\n", j);
}
, который дает
0x7fff67a361b0
(nil)
Но когда я закомментировать второй Printf
#include <stdio.h>
main() {
int * i;
int * j;
printf("%p\n", i);
//printf("%p\n", j);
}
выход равен нулю. Мне любопытно, почему в первой версии с двумя printf только j ничтожно, а я нет.
Кроме использования неинициализированных данных (которые не определены), вы передаете указатели на 'printf()' в формате '% d', который также не определен. Вам было бы лучше использовать '% p' или явно преобразовать из указателя в' int'. –