Что будет выводиться, если вы скомпилируете и выполните следующий c-код?Компиляция в C
void main(){
int huge*p=(int huge*)0XC0563331;
int huge*q=(int huge*)0xC2551341;
*p=200;
printf("%d",*q);
}
Что будет выводиться, если вы скомпилируете и выполните следующий c-код?Компиляция в C
void main(){
int huge*p=(int huge*)0XC0563331;
int huge*q=(int huge*)0xC2551341;
*p=200;
printf("%d",*q);
}
Предполагая, что вы имели в виду, чтобы написать следующее:
#include <stdio.h>
int main(void){
int *p=(int *)0XC0563331;
int *q=(int *)0xC2551341;
*p=200;
printf("%d",*q);
return 0;
}
, то выход должен быть любым целым значением сохраняется, начиная с адреса 0xC2551341
.
Я не уверен, что должно представлять int huge
; более широкие целые типы: long int
и long long int
(или только long
и long long
). Обратите внимание, что эти более широкие типы используют спецификаторы преобразования %ld
и %lld
соответственно.
'огромный' относится к 16-разрядному доступу к памяти x86 для доступа к адресам за пределами текущего сегмента 64 Кбит .. Он выглядит как код из какого-то античного компилятора , и будет почти наверняка seg-fault на современном компиляторе и ОС. – Clifford
Почему вы не проверяете? –
Возможно неопределенное поведение. – MikeCAT
Затем опубликуйте сообщение об ошибке и разрешите проблему, вместо того чтобы задать такой вопрос ... да, честно говоря, дерьмо. «Приятель». Как программа, которая не компилируется, имеет выход !? И его неопределенное поведение в любом случае. – Downvoter