They work differently and eventually give different result in some particular case.
by looking at the code segements of both work1 and work2, the intended purposes of them could be like as follows:
1. $a[j]$ = ( initial second element of array from Ith position + 1 )
2. return value = ( initial second element of array from Ith position + 1 ) - 3;
But above code segement work1 & work2 will give different results if input $(*a,i,j)$ is such that $j=i+2$
if $j=i+2;$
in work1 we are not using any temporary variable to store old $a[j]$, So,
return value of work1 = $modified \ \ a[j] -3$
But,
return value of work2 = $old \ \ a[j] - 3$
And for j = i+2 case work1 o/p is greater than work2 o/p by 1