#include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedef struct _Teacher
{
struct _Teacher *t;
}Teacher;
int main()
{
Teacher teacher1;
Teacher teacher2;
Teacher * head1 = &teacher1;
Teacher * head2 = &teacher2;
printf("\n---原來的地址---\n");
printf("T1%16d\n",&teacher1);
printf("T1.t%16d\n",&teacher1.t);
head1->t = head2;
printf("\n----更改內部指針後的地址-------\n");
printf("H1%16d\n",head1);
printf("H1.t%16d\n",head1->t);
printf("\n--------------------\n");
}
為什麼指向結構體Teacher的指針內部的指針可以和Teacher地址不相同;
第一個輸出地址是相同的
看了大家的解答,每個人的理解方式不盡相同,但都是一個意思。
1.指針本身就是一個變量,它的值存放的是一個地址,而指針變量本身也有地址;即對於int *a:a的值和&a的值是不同的。結構體也是一種類型,所以道理是一樣的。
printf("H1%16d\n",head1);
printf("H1.t%16d\n",head1->t);
輸出的值不同。
Teacher * head1 = &teacher1;
Teacher * head2 = &teacher2;
head1的值是結構體變量teacher1的地址,head2的值是結構體變量teacher2的地址;
head1->t = head2;
那麼結構體變量teacher1內部變量t的值就是head2的值,也就是結構體變量teacher2的地址。
現在明白這裡輸出值為什麼不同了吧?就一點:兩個值分別是兩個結構體變量的地址,肯定不同了。
2.再一點:
printf("T1%16d\n",&teacher1);
printf("T1.t%16d\n",&teacher1.t);
輸出值相同。
因為,&teacher1是結構體變量的地址,&teacher1.t是結構體變量內部變量的地址,而這個結構體內部只有一個變量,所以她的地址當然是和結構體變量的地址相同了。倘若,這個結構體內部有好幾個變量,那麼就不一定。對於這個,你可以參考數組來理解,為什麼一個數組的地址和數組裡第一個元素的地址相同,就是這個原因。
就以上兩點不知你明白不?若還有疑問,可以回復我。希望可以幫到你!