zoukankan      html  css  js  c++  java
  • 指针访问结构体成员的问题

    今天给大一的小孩讲结构体,讲到指向结构体的指针的时候,突然一个小孩提出了一个问题:指向结构体成员的指针p加1后指向谁?当时懵了,想写个程序验证一下,脑子一片空白。好像提问题的那个小孩听明白的,就干脆让他写吧。哈哈,他还挺厉害的,他写的代码大体是这样的:

    #include<stdio.h>
    struct data
    {
        int a;
        int b;
        int c;
    };
    int main()
    {
        struct data a[3]={
            {11,12,13},
            {21,22,23},
            {31,32,33}
        };
        int *p=&a[0].c;//*p=13
        p++;
        printf("%d\n",*p);

    大家认为会输出什么?是23吗?

    出人意料,输出的结果是21

    我是这么解释的:因为p是指向int *型的,所以指针后移一个int单位,或者说后移四个存储单元,又因为结构体是连续存储的,所以后移之后就指向下一个结构体的第一个元素,也就是21。如果我们将int a;改为double a;输出为0,这就验证了我的观点 ,同样,如果将int a;改为char a;的话,这样就会和后面的数据混起来,输出为2293525,可以认为无效数字。

    所以,一般情况下我们只用只指向结构体的指针,而不用指向结构体成员的指针。


    博主ma6174对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处http://www.cnblogs.com/ma6174/

    对文章有啥看法或建议,可以评论或发电子邮件到ma6174@163.com


  • 相关阅读:
    htmlunit 基础01
    @Transactional 事务失效问题
    SQL优化总结
    单点登录实现过程
    常见的mybatis对应关系
    命名规范(Oracle数据库)
    12-5 作为可叠加修改的特质
    12-4 Ordered特质
    10 绘制螺旋示例
    10-6 参数化字段
  • 原文地址:https://www.cnblogs.com/ma6174/p/2343912.html
Copyright © 2011-2022 走看看