sip100105 2015-06-29 09:02 采纳率: 100%
浏览 1770
已采纳

大神求指导简单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地址不相同;
第一个输出地址是相同的

  • 写回答

9条回答

  • Self_Promotion 2015-06-29 15:33
    关注

    看了大家的解答,每个人的理解方式不尽相同,但都是一个意思。

    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是结构体变量内部变量的地址,而这个结构体内部只有一个变量,所以她的地址当然是和结构体变量的地址相同了。倘若,这个结构体内部有好几个变量,那么就不一定。对于这个,你可以参考数组来理解,为什么一个数组的地址和数组里第一个元素的地址相同,就是这个原因。

    就以上两点不知你明白不?若还有疑问,可以回复我。希望可以帮到你!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献