• C语言中 指针与结构体


      

    就像数组一样,指向结构体的指针存储了结构体第一个元素的内存地址。与数组指针一样,结构体的指针必须声明和结构体类型保持一致,或者声明为void类型。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct person {
      int age;
      char *name;
    };
    struct person first;
    struct person *ptr;
     
    first.age = 21;
    char *fullname = "full name";
    first.name = fullname;
    ptr = &first;
     
    printf("age=%d, name=%s ", first.age, ptr->name);

    第1至6行声明了一个person结构体,一个变量指向了一个person结构体和指向person结构体的指针。第8行为age成员赋了一个int值。第9至10行我们声明了一个char指针并赋值给一个char数组并赋值给结构体name成员。第11行我们把一个person结构体引用赋值给结构体变量。

    第13行我们打印了结构体实例的age和name。这里需要注意两个不同的符号,’.’ 和 ‘->’ 。结构体实例可以通过使用 ‘.’ 符号访问age变量。对于结构体实例的指针,我们可以通过 ‘->’ 符号访问name变量。也可以同样通过(*ptr).name来访问name变量。

    指针和结构类型的关系 
    可以声明一个指向结构类型对象的指针。 
      例十一: 
    structMyStruct 

     inta; 
     intb; 
     intc; 

    MyStructss={20,30,40};
    //声明了结构对象ss,并把ss的三个成员初始化为20,30和40。 
    MyStruct*ptr=&ss;
    //声明了一个指向结构对象ss的指针。它的类型是MyStruct*,它指向的类型是MyStruct。 
    int*pstr=(int*)&ss;
    //声明了一个指向结构对象ss的指针。但是它的类型和它指向的类型和ptr是不同的。
      请问怎样通过指针ptr来访问ss的三个成员变量? 
      答案: 
    ptr->a; 
    ptr->b; 
    ptr->c; 

  • 相关阅读:
    使用arthas排查cpu飙高问题
    可转债发行一览表2022最新
    图解SSD不同的接口:SATA、MSATA、M.2 SATA、M.2 NVME
    eclipse maven 打war包的几种方式
    eclipse 在配置外部工具时可使用如下变量:
    LVS与Nginx区别
    maven
    mac下安装vuecli时报错error 13
    第一次使用Android Studio时你应该知道的一切配置
    window DOS命令官方介绍
  • 原文地址:https://www.cnblogs.com/lihuidashen/p/3402237.html
Copyright © 2020-2023  润新知