edit - Я был совершенно неправ, когда сказал, что в скобках указан порядок операций. AndreyT был прав, чтобы исправить меня.
Исходный код, который я разместил, также имел неопределенное поведение. Это моя вторая попытка.
Мой оригинальный пост также ниже этого, так что исправления можно увидеть.
Хорошей практикой кодирования является разбиение объявлений переменных на несколько строк, чтобы вы могли видеть, что происходит.
// Этот код является экспериментом с указателями
#include<stdio.h>
int main()
{
int a=2; //initialize a to 2
int *f1;
int *f2;
f1 = &a; //f1 points to a
f2 = &a; //f2 points to a
a += 2.5;
*f1 += a;
*f1 += a;
*f2 += a;
*f2 += a;
printf("\n%d %d %d\n",a,*f1,*f2);
return 0;
}
результат распечатки 64 64 64
// Мой предыдущий неверный код указан ниже:
# включают
int main()
{
int a=2; //initialize a to 2
int *f1;
int *f2;
f1 = &a; //f1 points to a
f2 = &a; //f2 points to a
a += 2.5; //2.5 + 2 = 4.5, but 4.5 as an int is 4.
*f1 += (*f1 += a); //4 + 4 = 8. 8 + 8 = 16.
*f2 += (*f2 += a); //16 + 16 = 32. 32 + 32 = 64.
printf("\n%d %d %d\n",a,*f1,*f2);
return 0;
}
результат распечатки 64 64 64
Вы должны использовать скобки, чтобы гарантировать, какие операции выполняются первыми. Надеюсь это поможет.
первый. Надеюсь, это поможет.