#include <stdio.h> void fun(int a,int b,int c){ int *ret; ret = &a -1; (*ret)+=8; } int main(){ int x; x = 0; fun(1,2,3); x = 1; printf("x is %d\n",x ); return 0; }
Я считаю, что x должно быть 1, но на самом деле это 0. Что вызывает это?
Вы вызываете очень неопределенное поведение. Переменная a в функции находится по адресу ( возможно в стеке), который обычно доступен только для функции. Уменьшение этого адреса приводит к неопределенному расположению. Вы вообще не знаете, что там, поэтому не представляете, что будет делать увеличение на 8.
a