У меня есть пример программы следующим образом:Что происходит в C, когда я беру адрес указателя?
int testPointer(int * intArray, int * ptr) {
printf("%i\n", intArray);
printf("%i\n", ptr);
printf("%lu\n", &intArray);
printf("%lu\n", &ptr);
return 0;
}
int main() {
int result = testPointer((int *) 0x1, (int *) 0x2);
return 0;
}
Типичный результат будет:
1
2
3212962484
3212962480
Первые две строки всегда одинаковы, и я понимаю, как они производятся. Третья и четвертая строки различаются для каждого прогона, но значение на четвертой строке всегда на четыре меньше, чем значение на третьей строке. Как расшифровать эти значения? Что они представляют и почему последняя строка всегда на четыре меньше третьей?
Это адреса памяти. –
Преобразование '0x1' в' int * 'может быть неопределенным поведением. Избегайте неопределенного поведения. Да. Избегай меня. – Sebivor
@undefinedbehaviour Преобразование '0x1' в' int * '- это неопределенное поведение? Почему это? – jogojapan