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

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

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

    点赞 打赏 评论
  • bdmh 2015-06-29 09:07

    结构体内部对象,那已经是一个新的对象了,为什么要和本身地址一样呢,自己保护自己的指针,这个指针指向新的地址,链表就是这样

    点赞 打赏 评论
  • cll_jj 2015-06-29 09:38

    你这个结构体可以理解为二级指针,*head1 是一个指向结构体的指针,结构体内部有一个指向同一个结构体的指针。
    而第一个为什么一样呢,应该是因为一个teacher1是一个结构体变量,分配内存时是分配到栈里的,结构体里的指针
    其实就是结构体的指针,你可以在结构体上加一个变量,它的内存地址就不一样了。

    点赞 打赏 评论
  • cll_jj 2015-06-29 09:38

    你这个结构体可以理解为二级指针,*head1 是一个指向结构体的指针,结构体内部有一个指向同一个结构体的指针。
    而第一个为什么一样呢,应该是因为一个teacher1是一个结构体变量,分配内存时是分配到栈里的,结构体里的指针
    其实就是结构体的指针,你可以在结构体上加一个变量,它的内存地址就不一样了。

    点赞 打赏 评论
  • frank_20080215 2015-06-29 09:54

    Teacher结构体包含的成员是一个指针,指向某一Teacher。
    Teacher teacher1;
    Teacher teacher2;
    ... ...
    printf("T1%16d\n",&teacher1); -- 取出teacher1的内容,就是成员的值,该值是一个指针。
    printf("T1.t%16d\n",&teacher1.t);-- 取出teacher2的数据成员t的值,

    点赞 打赏 评论
  • 一枪尽骚丶魂 2015-06-29 10:10

    指向指针的指针,这个意思明白么?

    点赞 打赏 评论
  • 西安小哥 2015-06-29 13:06

    内部指针是int型,分配的空间不一样,所以地址不一样

    点赞 打赏 评论
  • sip100105 2015-06-29 13:21

    各位大神,结构体变量和内部变量地址相同,这个可以理解,但为什么指针指向这个结构体变量的时候,指针的地址和结构体变量内部的地址不相同呢?printf("指针的地址:%d-指针内部变量的地址%d",head1,head1->t);head->t地址只有3,为什么?

    点赞 打赏 评论
  • 369cloud 2015-10-23 05:30

    分享几个CSS运用的技巧。1.使用:not()在菜单上应用/取消应用边框 2.给body添加行高 3.所有一切都垂直居中 4.逗号分隔的列表 5.使用负的nth-child选择项目 6.对图标使用SVG 7.优化显示文本 8.对纯CSS滑块使用max-height 9.继承box-sizing 10.表格单元格等宽 11用Flexbox摆脱外边距的各种hack 12.使用属性选择器用于空链接 http://bbs.369cloud.com/forum.php?mod=viewthread&tid=445&extra=page%3D1 希望能够给你带来帮助

    点赞 打赏 评论

相关推荐 更多相似问题