It's because the way you are doing is wrong. You cannot get next value by incrementing like this.
Because Array provide contiguous memory allocation so there we can take advantage of storage organization and get next object value by incrementing.
Since all the node new, new1 and new2 are not contiguously stored in memory so you can not get address of node which is being pointed by incrementing the current node.
Actually the program output is correct, here once you are trying to increment to temp then its pointing to next memory location with an increment of sizeof(struct node) but that is garbage because you have not initialized it.
You can get the value as 2
by changing
temp++
to
temp = temp->link;
you can have a look at this
http://ideone.com/7qf0cV