• 结构体指针


    指向结构体类型变量的使用
    首先让我们定义结构体:
    struct stu
    {
    char name[20];
    long number;
    float score[4];
    } ;
    再定义指向结构体类型变量的指针变量:
    struct stu *p1, *p2 ;
    定义指针变量p 1、p 2,分别指向结构体类型变量。引用形式为:指针变量→成员;
    [例7-2] 对指向结构体类型变量的正确使用。输入一个结构体类型变量的成员,并输出。

    #include <stdlib.h> /*使用m a l l o c ( ) 需要* /
    struct data / *定义结构体* /
    {
    int day,month,year;
    } ;
    struct stu /*定义结构体* /
    {
    char name[20];
    long num;
    struct data birthday; /嵌*套的结构体类型成员*/
    } ;
    main()
    {
    struct stu *student; 定/*义结构体类型指针*/
    student=malloc(sizeof(struct stu)); 为/指* 针变量分配安全的地址*/
    printf("Input name,number,year,month,day:/n");
    scanf("%s",student->name); 输/*入学生姓名、学号、出生年月日*/
    scanf("%ld",&student->num);
    scanf("%d%d%d",&student->birthday.year,&student->birthday.month,
    &student->birthday.day);
    printf("/nOutputname,number,year,month,day/n");
    /*打印输出各成员项的值*/
    printf("%20s%10ld%10d//%d//%d/n",student->name,student->num,
    student->birthday.year,student->birthday.month,
    student->birthday.day);
    }


    程序中使用结构体类型指针引用结构体变量的成员,需要通过C提供的函数malloc()来为
    指针分配安全的地址。函数sizeof()返回值是计算给定数据类型所占内存的字节数。指针所指
    各成员形式为:


    student->name
    student->num
    student->birthday.year
    student->birthday.month
    student->birthday.day


    指向结构体类型数组的指针的使用
    定义一个结构体类型数组,其数组名是数组的首地址。
    定义结构体类型的指针,既可以指向数组的元素,也可以指向数组,在使用时要加以区分。
    [例7-3] 在例7 - 2中定义了结构体类型,根据此类型再定义结构体数组及指向结构体类型的指针


    struct data
    {
    intday,month,year;
    };
    struct stu/*定义结构体*/
    {
    char name[20];
    long num;
    struct data birthday;/嵌*套的结构体类型成员*/
    };


    struct stustudent[4],*p;定/*义结构体数组及指向结构体类型的指针*/
    作p=student,此时指针p就指向了结构体数组student。
    p是指向一维结构体数组的指针,对数组元素的引用可采用三种方法。
    1)地址法
    student+i和p+i均表示数组第i个元素的地址,数组元素各成员的引用形式为:
    (student+i)->name、(student+i)->num和(p+i)->name、(p+i)->num等。student+i和p+i
    与&student[i]意义相同。
    2)指针法
    若p指向数组的某一个元素,则p++就指向其后续元素。
    3)指针的数组表示法
    若p=student,我们说指针p指向数组student,p[i]表示数组的第i个元素,其效果与
    student[i]等同。对数组成员的引用描述为:p[i].name、p[i].num等。
    [例7-4]指向结构体数组的指针变量的使用。


    structdata/*定义结构体类型*/
    {
    intday,month,year;
    };
    structstu/*定义结构体类型*/
    {
    char name[20];
    long num;
    struct data birthday;
    };
    main()
    {
    int i;
    structstu*p,student[4]={{"liying",1,1978,5,23},{"wangping",2,1979,3,14},
    {"libo",3,1980,5,6},{"xuyan",4,1980,4,21}};
    /*定义结构体数组并初始化*/
    p=student;/*将数组的首地址赋值给指针p,p指向了一维数组student*/
    printf("/n1----Outputname,number,year,month,day/n");
    for(i=0;i<4;i++)/*采用指针法输出数组元素的各成员*/
    printf("%20s%10ld%10d//%d//%d/n",(p+i)->name,(p+i)->num,
    (p+i)->birthday.year,(p+i)->birthday.month,
    (p+i)->birthday.day);
    }
  • 相关阅读:
    linux中添加ftp用户,并设置相应的权限
    mysql 命令管理
    阿里云服务器资料
    sql替换指定字段指定字符串
    apache本地域名ip重定向vhosts
    php数组序列化serialize与unserialize
    Android 开发第三天
    Android 开发第二天
    Android开发的第一天
    字符的截取方法使用的是Substring 和三目运算符
  • 原文地址:https://www.cnblogs.com/yintingting/p/5566667.html
Copyright © 2020-2023  润新知