• 35深入理解C指针之---结构体基础


      一、结构体基础

        1、定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合

        2、特征:

          1)、结构体可以使得不同类型的数据进行结合

          2)、结构体可以使用内置的数据类型,包括指针

          3)、结构体可以使用自定义的数据类型,甚至自身(必须是命名结构体)

          4)、结构体成员的访问通过成员访问符号'.',若是结构体指针时,访问成员变量时可以使用->

          5)、结构体的普通定义

          6)、结构体的类型定义

          7)、结构体指针的定义及应用

          8)、结构体的大小

          9)、结构体其他
          

        3、基本定义及应用:

     1 #include <stdio.h>
     2 #include <string.h>
     3
     4 int main(int argc, char **argv)
     5 {
     6     struct _person{
     7         char firstName[10];
     8         char lastName[30];
     9         char title[100];
    10         int age;
    11     };
    12
    13     struct _person person1;
    14     strcpy(person1.firstName, "guo");
    15     strcpy(person1.lastName, "zhumulama");
    16     strcpy(person1.title, "study hard every day!");
    17     person1.age = 39;
    18
    19     printf("usual struct define:
    ");
    20     printf("The person1 info:
     firstName: %s
     lastName: %s
     title: %s
     and age: %d
    ", person1.firstName, person1.lastName, person1.title, p   erson1.age);
    21
    22     typedef struct person{
    23         char firstName[10];
    24         char lastName[30];
    25         char title[100];
    26         int age;
    27     } Person;
    28
    29     Person person2;
    30     strcpy(person2.firstName, "zhang");
    31     strcpy(person2.lastName, "hangchao");
    32     strcpy(person2.title, "study hard every year!");
    33     person2.age = 42;
    34
    35     printf("typedef struct define:
    ");
    36     printf("The person2 info:
     firstName: %s
     lastName: %s
     title: %s
     and age: %d
    ", person2.firstName, person2.lastName, person2.title, p   erson2.age);
    37
    38     return 0;
    39 }

        代码说明:

          1)、第6-11行代码是结构体的普通定义

          2)、若使用普通定义,声明结构体的方式如13行所示

          3)、第22-27行代码是结构体的类型定义
          
          4)、若使用类型定义,声明结构体的方式如29行所示

          5)、第20行和36行,演示了结构体成员的访问;

          6)、一般情况下,使用结构体的类型定义比较方便;


        4、结构体指针及结构体成员指针的应用:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4
     5 int main(int argc, char **argv)
     6 {
     7     typedef struct _person{
     8         char *firstName;
     9         char *lastName;
    10         char *title;
    11         int age;
    12     } Person;
    13
    14     Person person1;
    15     person1.firstName = (char *)malloc(strlen("zhang") + 1);
    16     strcpy(person1.firstName, "zhang");
    17     person1.lastName = (char *)malloc(strlen("hangchao") + 1);
    18     strcpy(person1.lastName, "hangchao");
    19     person1.title= (char *)malloc(strlen("study hard every year!") + 1);
    20     strcpy(person1.title, "study hard every year!");
    21     person1.age = 42;
    22
    23     printf("The person1 info:
     firstName: %s
     lastName: %s
     title: %s
     and age: %d
    ", person1.firstName, person1.lastName, person1.title, person1.age);
    24     printf("
    ");
    25
    26     Person *ptrPerson = (Person *)malloc(sizeof(Person));
    27     (*ptrPerson).firstName = (char *)malloc(strlen("wangu") + 1);
    28     strcpy((*ptrPerson).firstName, "wangu");
    29     (*ptrPerson).lastName = (char *)malloc(strlen("chaohang") + 1);
    30     strcpy((*ptrPerson).lastName, "chaohang");
    31     (*ptrPerson).title= (char *)malloc(strlen("study hard every dayd!") + 1);
    32     strcpy((*ptrPerson).title, "study hard every dayd!");
    33     (*ptrPerson).age = 42;
    34
    35     printf("The (*ptrPerson). info:
     firstName: %s
     lastName: %s
     title: %s
     and age: %d
    ", (*ptrPerson).firstName, (*ptrPerson).lastName, (*ptrPerson).title, (*ptrPerson).age);
    36     printf("
    ");
    37
    38     Person *ptrPerson1 = (Person *)malloc(sizeof(Person));
    39     ptrPerson1->firstName = (char *)malloc(strlen("wangu") + 1);
    40     strcpy((*ptrPerson1).firstName, "wangu");
    41     ptrPerson1->lastName = (char *)malloc(strlen("chaohang") + 1);
    42     strcpy((*ptrPerson1).lastName, "chaohang");
    43     ptrPerson1->title= (char *)malloc(strlen("study hard every dayd!") + 1);
    44     strcpy((*ptrPerson1).title, "study hard every dayd!");
    45     ptrPerson1->age = 42;
    46
    47     printf("The ptrPerson1-> info:
     firstName: %s
     lastName: %s
     title: %s
     and age: %d
    ", ptrPerson1->firstName, ptrPerson1->lastName, ptrPerson1->title, ptrPerson1->age);
    48     printf("
    ");
    49
    50     return 0;
    51 }

        代码说明:

          1)、第7-12行代码是结构体的类型定义,结构体成员为指针变量

          2)、第14行声明结构体变量

          3)、第15,17,19行代码是结构体变量成员分配内存
          
          4)、第16,18,20行代码是结构体变量成员赋值内容

          5)、第23行,演示了结构体成员的访问;

          6)、第26行和38行声明结构体指针变量;

          7)、第26行和38行为结构体指针变量申请内存;
          
          8)、第35行代码是结构体指针变量访问方式,使用(* structName).是结构体指针访问成员的老式方法,现在基本不用;

          9)、第47行代码是结构体指针变量访问方式,使用structName->是结构体指针访问成员的新式方法,现在用的比较频繁;

  • 相关阅读:
    Java中使用Log4j记录错误、输出日志
    oracle 触发器的实例(转)
    [jsp学习笔记]servelt get post
    [winfrom]C#中使用SendMessage
    3)创建,测试,发布 第一个NET CORE程序
    DDL和DML 的区别
    [jsp学习笔记] jsp过滤器
    [jsp学习笔记] jsp基础知识 数据初始化、同步
    [jsp学习笔记]jstl标签的使用
    LiteORM-For-DotNet,我的第一个开源库……更新
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/6960853.html
Copyright © 2020-2023  润新知