Почему я получаю неправильный ответ в этом C-коде? - PullRequest
0 голосов
/ 10 сентября 2018

enter image description here

#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. Что вызывает это?

1 Ответ

0 голосов
/ 10 сентября 2018

Вы вызываете очень неопределенное поведение. Переменная a в функции находится по адресу ( возможно в стеке), который обычно доступен только для функции. Уменьшение этого адреса приводит к неопределенному расположению. Вы вообще не знаете, что там, поэтому не представляете, что будет делать увеличение на 8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...