У меня вопрос на языке C. Рассмотрим следующий код (это минимальный пример):
#include <stdio.h>
int f(int**, int*);
int main(int argc, char *argv[])
{
int *u = NULL, t1=0, t2=1;
u = &t1;
printf("t1 : %d\n", t1);
printf("t2 : %d\n\n", t2);
*u = 36;
printf("t1 : %d\n", t1);
printf("t2 : %d\n\n", t2);
*u = f(&u, &t2);
printf("t1 : %d\n", t1);
printf("t2 : %d\n\n", t2);
return 0;
}
int f(int** p, int* e){
*p = e;
return 24;
}
Когда я запускаю эту программу, я получаю следующий результат:
t1 : 0
t2 : 1
t1 : 36
t2 : 1
t1 : 24
t2 : 1
Что меня удивляет, так это то, что левая часть выражения (т.е. * u):
*u = f(&u, &t2);
фиксируется перед обработкой функции f.
На самом деле я ожидал следующего результата, так как функция f изменяет указатель u:
t1 : 0
t2 : 1
t1 : 36
t2 : 1
t1 : 36
t2 : 24
Это нормально? Я что-то пропустил в своем классе C?