Путать с адресом функции в c
Я сбит с толку! Являются ли все следующие printf правильным способом печати адресов функций? Позвольте мне также сказать вам мое замешательство. Каждый раз, когда я запускаю все эти printf (то есть, 1-й printf, 2-й printf и 3-й printf), на выходе я получаю 02D4 02D4 02D4, но если я удаляю или комментирую 1-й и 2-й printf, я получаю следующий вывод 02BA, когда я удаляю третий оператор printf, я получаю следующий вывод 02D0 Снова, когда я раскомментирую все эти три, я получаю: 02D4 02D4 02D4 Почему один оператор влияет на вывод другой строки printf? Разве это не адрес функции? Я слышал, что s и & дают то же значение, что и адрес (как массивы). но здесь я запутался, почему на s и & влияют, когда я пытаюсь также напечатать b, где b=s или &s.
#include<stdio.h>
#include<conio.h>
int s(int);
void main()
{
int a=10,*b;
clrscr();
b=s(a++);
b=&s;
printf("%p\n",s); // 1st printf
printf("%p\n",&s); //2nd printf
printf("%p\n",b); //3rd printf
getch();
}
int s(int x)
{
return x;
}
1 ответ
Вы не можете зависеть от адреса переменной или функции, так как компилятор и операционная система могут влиять на то, где он заканчивается.
Но предположим, что операционная система всегда загружает ваш исполняемый код по одному и тому же адресу, если вы измените длину кода в main()
функция, которая может очень хорошо влиять на начальный адрес s()
функция. Следовательно, вы получите другой результат.