Next, it pushes the local variable onto the stack and calls b(). Finally, it loads its first parameter into r1 and adds it to the return value of b(). It returns this.
Therefore, a() looks as follows. Note, I can name the local variable and the parameter anything. Moreover, the local variable can be any 4-byte type (i.e. (char *) or float):
int a(int i) { int j; c(&j, 1); return b(j)+i; }
First, it sets i to 10. Next, it performs (i+3) and pushes the result on the stack. Then it calls a(), and adds five to the return value. The result is then stored in j. Finally, j is returned.
Therefore, main() looks as follows:
main() { int i, j; i = 10; j = a(i+3)+5; return j; }