Пожалуйста, обратите внимание на следующее заявление:Разница в операторе инкремента-декремента в C и JAVA
int a[]={1,2,3,4,5,6,7,8};
int i=0,n;
n=a[++i] + i++ + a[i++] + a[i] ;
Согласно моей логике п должно быть 10. Но я получаю различный результат в с (выход 7) Однако в java Я получаю ожидаемый результат, который равен 10. Есть ли разница в том, как работают операторы приращения и декремента в c и java.
Вот моя точная с и Java-код:
#include <stdio.h>
int main()
{
int a[]={1,2,3,4,5,6,7,8};
int i=0,n;
n=a[++i] + i++ + a[i++] + a[i] ;
printf("%d",n);
getch();
return 0;
}
Java код с выхода: 10
public class HelloWorld{
public static void main(String []args){
int a[]={1,2,3,4,5,6,7,8};
int i=0,n;
i=0;
n=a[++i] + i++ + a[i++] + a[i] ;
System.out.println(n);
}
}
Дизайнеры Java решили точно определить результаты для всех случаев приращения и т. Д., Хотя JLS рекомендует избегать множественных побочных эффектов в одном утверждении. Стандарты C++ оставляют некоторые случаи неопределенными. –
Вы имеете в виду, что причина, по которой результат равен 7, а не 10, называется так называемым «неопределенным поведением c». Фактически ответ может быть равен 7, если вы оцениваете выражение справа налево, а не слева направо. Вы уверены, что это не имеет никакого отношения к ассоциативности операторов. –
@PatriciaShanahan –