В C у меня возникают проблемы с трассировкой кода и я не уверен, как вычисляется значение? - PullRequest
0 голосов
/ 05 апреля 2019

Я отслеживаю код, но не понимаю, как рассчитываются значения. Мой вопрос к комментариям рядом с кодом.

Я отслеживаю код и понимаю все части, кроме 2. Я разместил эти 2 части ниже. Я буду очень рад, если кто-нибудь сможет мне помочь.

 #include <stdio.h>
int function1(int *m, int n)
{
    *m = *m + n;
    return(*m);
}
int function2(int n, int *m)
{
    n = *m + 2;
    return(n);
}
int main()
{
    int x = 1, y = 3;
    int *xptr = &x,*yptr = &y;      
    x = 1; y = 3;
    y = function1(xptr,x);
    printf("x = %d, Y = %d\n",x,y);//x=2 but why? shouldn't it be x=1? y=2          
    x = 1; y = 3;
    x = function1(yptr,function2(2,yptr));
    printf("x = %d, y = %d\n",x,y);//x=8 y=8 but why? shouldn't y=3?        
return 0;
}

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Итак, внутри функции1:

int function1(int *m, int n) {
    *m = *m + n;
    return(*m);
}                 /* 
...                */
y = function1(xptr,x);
  • n хранится копия значения x,
  • m содержит копию значенияxptr, который является адресом x.
  • *m относится к содержимому адреса, удерживаемого m
  • ... *m = *m + n

Это 'присваивается содержимому адреса x: содержимое адреса x плюс значение x'.

Содержимое адресаx (иначе это значение) равно 1. Поэтому мы присваиваем 1 + 1 содержимому адреса, содержащему значение x.

0 голосов
/ 05 апреля 2019

В первом printf, x == 2, потому что при вызове function1 первый раз *m является указателем на x, поэтому вы назначаете местоположение, указанное m (это местоположениеx), *m + n == x + x == 1 + 1 == 2.

Во втором printf, y == 8, поскольку в function2 вы возвращаете его значение, увеличенное на 2 (т. Е. 3 + 2 == 5), но без обновления y,поэтому в function1 вы суммируете результирующее значение function2 со старым значением y (3 + 5 == 8).function1 возвращает также это значение, также x == 8.

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