zoukankan      html  css  js  c++  java
  • 结构体与共用体——指向结构数组的指针

    指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。

    结构指针变量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。

    设ps为指向结构数组的指针变量,则ps也指向该结构数组的0号元素,ps+1指向1号元素,ps+i则指向i号元素。

    这与普通数组的情况是一致的。

    【例11.6】用指针变量输出结构数组。

    struct stu
    {
        int num;
        char *name;
        char sex;
        float score;
    }boy[5]={
              {101,"Zhou ping",'M',45},
              {102,"Zhang ping",'M',62.5},
              {103,"Liou fang",'F',92.5},
              {104,"Cheng ling",'F',87},
              {105,"Wang ming",'M',58},
            };
    main()
    {
     struct stu *ps;
     printf("No	Name			Sex	Score	 ");
     for(ps=boy;ps<boy+5;ps++)
     printf("%d	%s		%c	%f	 ",ps->num,ps->name,ps->sex,ps->score);
    }

    在程序中,定义了stu结构类型的外部数组boy并作了初始化赋值。

    在main函数内定义ps为指向stu类型的指针。

    在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy数组中各成员值。

    应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,

    但是,不能使它指向一个成员。

    也就是说不允许取一个成员的地址来赋予它。因此,下面的赋值是错误的。

    ps=&boy[1].sex;

    而只能是:ps=boy;(赋予数组首地址)

    或者是:ps=&boy[0];(赋予0号元素首地址)

    #include <stdio.h>
     
    struct student
    {
        int num;
        char name[20];
        char sex;
        int age; 
    };
    /*指向结构体类型的数组的初始化*/ struct student stu[3]={
    {10101,"Li Lin",'M',18},
    {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20}};
    void main() { struct student *p;/*指向结构体类型的指针变量*/ printf("NO Name Sex Age "); for(p=stu;p<stu+3;p++)/*循环地址*/ { /* printf("%5d%-20s %2c %4d ",p->num,p->name,p->sex,p->age); 等价于*/ printf("%5d%-20s %2c %4d ",(*p).num,(*p).name,(*p).sex,(*p).age); } system("pause"); }
    #include <stdio.h>
    #include <iostream>
    #include<math.h>
    using namespace std;
    
    int main()
    {
       //定义结构类型
        struct human {
           char name[10];
           int sex;
           int age;
        };
    
    //声明结构数组和结构指针变量,并初始化
    human x[]={
    {"WeiPing",1,30},
    {"LiHua",1,25},
    {"LiuMin",0,23}},*p=NULL; //用下标变量的输出结构数组的元素 for (int i=0;i<3;i++) { cout<<x[i].name<<‘ ‘; cout<<x[i].sex<<‘ ‘; cout<<x[i].age<<endl; } cout<<"----------------"<<endl; //用结构指针输出结构数组的元素 for (p=x;p<=&x[2];p++) { cout<<p->name<<‘ ‘; cout<<p->sex<<‘ ‘; cout<<p->age<<endl; } system("pause"); }
  • 相关阅读:
    eCharts_数据过多底部滚动条实现数据展示
    canvas_简单练习
    canvas_基于canvan绘制的双半圆环进度条
    js_读【javascript面向对象编程指南】笔记
    csc_滤镜filter和实现透明的两种方式
    jq_从右向右的滑入滑出效果
    textarea输入框实时统计输入字符数
    windows7_常用操作终端操作
    1080. Graduate Admission (30)
    1079. Total Sales of Supply Chain (25)
  • 原文地址:https://www.cnblogs.com/shangdawei/p/4697187.html
Copyright © 2011-2022 走看看