After the example code is a drawing of the stack right before the return from crazy_function.
The program:
#include <stdio.h>
#include <string.h>
struct personT {
char name[32];
int age;
};
// a function prototype:
void crazy_function(int i_val, struct personT per, int a[], int n);
//
// main function:
//
int main() {
struct personT person;
int x, i;
int arr[5];
for(i=0; i < 5; i++) {
arr[i] = i;
}
for(i=0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]); // bucket values: 0 1 2 3 4
}
x = 10;
strcpy(person.name, "Tia");
person.age = 21;
crazy_function(x, person, arr, 5);
for(i=0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i], 5); // bucket values: 0 1 4 9 16
}
printf("x = %d age = %d name = %s\n", x, person.age, person.name); // values: 10 21 Tia
}
//
// crazy function definition:
//
void crazy_function(int i_val, struct personT per, int a[], int n) {
int i;
for(i=0; i < n; i++) {
a[i] = a[i]*a[i];
}
strcpy(per.name, "Ace");
per.age = 18;
i_val = 100;
//**** THE STACK IS DRAWN RIGHT BEFORE THE return STATMENT IS EXECUTED
return;
}
The stack right before crazy_function returns:
STACK
|=====================================================|
crazy_function: | ------- |
| i | 5 | |
| ------- |
| ------- |
| i_val | 100 | |
| ------- |
| ------------------------------------------ |
| per | name : |'A'| 'c'| 'e' |'\0'| ... | | |
| ------------------------------------------ |
| | age : | 18 | |
| ------------------------------------------ |
| --------- |
| a | *-- |--------------------------------------------
| --------- | |
| ------- | |
| n | 5 | | |
| ------- | |
|=====================================================| |
main: | | |
| | |
| ---------------------------------------------------
| | |
| \/ |
| ----------------------- |
| arr | 0 | 1 | 4 | 9 | 16 | |
| ----------------------- |
| ------- |
| x | 10 | |
| ------- |
| ------- |
| i | 5 | |
| ------- |
| ------------------------------------------ |
| person | name : |'T'| 'i'| 'a' |'\0'| ... | | |
| ------------------------------------------ |
| | age : | 21 | |
| ------------------------------------------ |
| |
|=====================================================|