I am studying for my final, which is tomorrow. It is an intro to C class and I have just a couple questions. He gave us this sample final and I don't get a couple of them and was seeing if someone could help me understand what is happening. Here goes...



Question #1: What is the output of the following code segment, assuming strcopy() works without problem?

Code:
int main()
{
       char data[10], *p;

       strcpy(date, "hello");

       p = data;

       while (*p != '\0')
                  *p++ += 1;

       printf("%s", data);

       return 0;
}
The answer is "ifmmp" so I guess I don't understand what is hapenning in the while section, if anyone could explain that it would be great.



Question #2:
What is the output of the following code segment?

Code:
int foo[3][3];

int main(_
{
	
	int i, j;
	int *p;

	for (i=0; i<3; i++)
		for (j=0; j<3; j++)
			foo[i][j] = (i+1) * (j+1);

	p = foo;

	printf("%d", *(p+7));

	return 0;
}
I guess I don't get what is happening at the printf statement with
*(p+7)...what does that do?

The answer according to him is 6.



Question #3:
What is the output of the following code segment?

Code:
struct list{
		int data;
		struct list * next;
		};
int main()
{
		struct list a, b, c;
		
		a.data = 3;
		b.data = 1;
		c.data = 2;

		a.next = &b;
		b.next = &c;

		printf("%d\n", a.next->next->data);

		return 0;
}
His answer is 2, but I have no clue how he got it. I don't really get the printf statement, so if anyone does, please help.

Thanks in advance for anyone who helps me, I really appreciate it and so does my grade.