程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 指針-大神求指導簡單C語言問題 剛剛入門

指針-大神求指導簡單C語言問題 剛剛入門

編輯:編程綜合問答
大神求指導簡單C語言問題 剛剛入門

#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是結構體變量內部變量的地址,而這個結構體內部只有一個變量,所以她的地址當然是和結構體變量的地址相同了。倘若,這個結構體內部有好幾個變量,那麼就不一定。對於這個,你可以參考數組來理解,為什麼一個數組的地址和數組裡第一個元素的地址相同,就是這個原因。

就以上兩點不知你明白不?若還有疑問,可以回復我。希望可以幫到你!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved