• c语言指针数组和结构体的指针


      指向数组的指针,先初始化一个数组,使用传统方式遍历

    1 void main()
    2 {
    3     int a[5] = { 1,2,3,4,5 };
    4     for (int i = 0; i < 5; i++)
    5     {
    6         printf("%d,%x
    ", a[i], &a[i]);
    7         printf("%d,%x
    ",*(a+i),a+i); //等价 a[i] , &a[i]
    8     }
    9 }

      a就是数组a的首地址,即元素1的地址, a + 1 代表 地址+1,即这里就是增加 int型 4字节的长度, 指向下一个地址即元素2的地址

    1 int a[5] = { 1,2,3,4,5 };
    2 int *p = NULL; //创建一个空指针
    3 p = a;//p是一个指针变量,a就是 数组首地址 元素1的地址    

      因为我们利用指针遍历同样能达到效果

    1 //利用指针循环
    2 for (int *pp = a; pp<a+5; pp++)  //地址++
    3 {
    4     printf("%d,%x
    ",*pp, pp);
    5 }

      有了上面的理解,指针结构体其实是一样的。

     1 //指针结构体
     2 struct info
     3 {
     4     char name[50];
     5     int id;
     6 };
     7 
     8 void main()
     9 {
    10     struct info myinfo[5] = { {"zc1",1},{ "zc2",2 }, {"zc3",3}, {"zc3",3}, {"zc4",4} };
    11     
    12     //常规方式输出
    13     for (int i = 0; i < 5; i++)
    14     {
    15         printf("%s,%d
    ",myinfo[i].name, myinfo[i].id);
    16         //指针
    17         printf("%s,%d
    ", (*(myinfo+i)).name, (*(myinfo + i)).id);
    18     }
    19 
    20     //利用指针循环,指针结构体
    21     struct info *px = myinfo;
    22     for (; px < myinfo; px++)
    23     {
    24         printf("%s,%d
    ", px->name, px->id); //指针结构体输出方式  指针变量->属性
    25         printf("%s,%d
    ", (*px).name, (*px).id); //指针结构体输出方式  *指针变量.属性
    26         // px->id等价 (*px).id
    27     }
    28 
    29     getchar();
    30 
    31 }

        

      

  • 相关阅读:
    大规模web服务读书笔记 狼
    MVC3如果虚拟目录中有点号,会导致静态文件404 狼
    CDN服务商和CDN常见问题 狼
    中文字段名,问题根源查询无聊话题。 狼
    NET下Session共享的几种实现方式 狼
    企业应用架构读书笔记与总结 狼
    Redis简单本机测试 狼
    你是否经历过这些,求如何继续才能提升 狼
    WinDbg配置和使用基础
    Python IDLE入门
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5759172.html
Copyright © 2020-2023  润新知