结构体与共用体——指向结构数组的指针

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

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

设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\tName\t\t\tSex\tScore\t ");
 for(ps=boy;ps<boy+5;ps++)
 printf("%d\t%s\t\t%c\t%f\t ",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\n");
     for(p=stu;p<stu+3;p++)/*循环地址*/
     {
         /* printf("%5d%-20s %2c %4d\n",p->num,p->name,p->sex,p->age); 等价于*/
         printf("%5d%-20s %2c %4d\n",(*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<<‘\t‘;
        cout<<x[i].sex<<‘\t‘;
        cout<<x[i].age<<endl;
    }
    cout<<"----------------"<<endl;

    //用结构指针输出结构数组的元素
    for (p=x;p<=&x[2];p++)
    {
        cout<<p->name<<‘\t‘;
        cout<<p->sex<<‘\t‘;
        cout<<p->age<<endl;
    }
    system("pause");

}
 
时间: 2024-10-14 04:45:05

结构体与共用体——指向结构数组的指针的相关文章

结构体、共用体、枚举____笔记

-------------------讲在前面 老规矩,本人小菜. 互联网是发达的,神奇的.其中,有开源与不开源一说,我不知道我懂多少. 我在网上取我所需,但是有时候会标注来源,有时候没标注.如果某大神觉得被冒犯了,请联系删除. 我会有复制粘贴,但我并不认为拿过来就是我的东西,只是纯粹的欣赏,学习. 开博客,主要是觉得对自己学习有益.我会记录自己觉得有意义的东东. 如果有人见到本文章,是我的荣幸,希望对你有所帮助. 当然,我不保证绝对正确,若你发现不对的地方,可以评论或者联系,指正批评,大家相互

「C语言」「例题」结构体与共用体

本篇收集<C语言程序设计教程>第九章“结构体与共用体”的所有例题. 1 #include <stdio.h> 2 3 /*输入一个学生的基本信息, 4 包括学号.姓名.性别.年龄.出生日期.三门成绩, 5 输出该学生的基本信息和平均成绩*/ 6 7 struct date 8 { 9 int year;/* 年份 */ 10 int month;/* 月份 */ 11 int day; /* 日期 */ 12 }; 13 14 struct student 15 { 16 char

不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 共用体 枚举 类型定义符 示例cStruct.h #ifndef _MYHEAD_STRUCT_ #define _MYHEAD_STRUCT_ #ifdef __cplusplus extern "C" #endif char *demo_cStruct(); #endif cStruct.c /* * 结构体,共用体,枚举,类型定义符 * * 注:结构体变量在做参数传递时,其内每个

结构体、共用体和位运算

1.C语言结构体的定义和使用 在实际问题中,一组数据往往具有不同的数据类型:例如在学生信息登记表中,姓名为字符型,学号为整型或字符型,年龄为整型,性别为字符型,成绩为整型或实型.因为数据类型不同,显然不能用一个数组来存放. 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据.定义结构体的一般形式为: struct 结构体名{ 成员列表 }; 每个成员都是结构体的组成部分,有名字,也有数据类型,形式为: 类型说明符 成员名; 例如用结构体来表示学生信息: struct stu{ c

第九章结构体与共用体实验报告

C程序实验报告 姓名:韦小闻     实验地点:第一教学楼514教室     实验时间:6月26日 实验项目 1. 结构体变量的应用 2 .结构体数组的应用 3 .共用体的应用 4 .结构体指针的应用 一.实验目的与要求 1.结构体变量的应用 ●定义结构体类型struct date,它含有年.月.日3个成员: ●定义struct date类型的变量,并从键盘输入初值: ●利用循环语句,计算天数: ●利用分支结构,判断闰年. 2.结构体数组的应用 ●定义候选人struct person结构体数组,

C++程序设计之结构体,共用体,枚举和typedef

[1]结构体的基本功 注意结构体里面可以有很多东西,可以结构体里面包含结构体 #include<iostream> using namespace std; struct Date { int month; int day; int year; }; struct Student { int num; char name[20]; char sex; Date birthday; float score; }student1,student2= {1002,"wangli"

typedef,结构体,共用体,联合体

typedef的用途: 封装数据类型,方便移植 简化函数指针的定义 结构体:不同类的型元素汇聚. (1).在声明类型的同时定义变量: struct结构体名{   成员列表 }变量名列表; (2).直接定义结构体类型变量 struct {     成员列表 }变量名表列; 指向结构体变量的指针 定义形式:struct结构体名 *结构体指针名; 例如:struct student *p; #define_CRT_SECURE_NO_WARNINGS  //去掉安全检查 #include<stdio.

字节对齐-------结构体、共用体

字节对齐结构体字节对齐:(结构体成员的数据类型为基本数据类型(int,double,char,short,long等))结构体的总大小是结构体成员中最宽基本数据类型大小的整数倍#include<iostream>using namespace std;struct S0{int a;char b;short c;};struct S1{char b;int a;short c;};struct S2{short d;char b;short e;int a;short c;};void mai

实验6 结构体、共用体与枚举

实验6 结构体.共用体与枚举 实验结论 Part1: 结构体类型及编程应用 程序ex1_2.cpp,补足后的程序源码↓ #include <stdio.h> const int N=5; // 定义结构体类型struct student,并定义STU为其别名 typedef struct student { long no; char name[20]; int score; }STU; // 函数声明 void input(STU s[], int n); int findMinlist(S

第九章 结构体与共用体

姓名:吕家浩    实验地点:教学楼514教室    实验时间:4月30日 一.本章要点 1.通过实验理解结构体和共用体的数据结构2.结构体.共用体中数组的使用及变量的赋值3.结构体和共用体定义时的嵌套使用(嵌套使用的结构体必须先定义) 二.实验内容 1.实验练习:9.1 问题描述:试利用结构体类型描述年.月.日,输入一个日期,统计该日期是本年度第多少天. 流程图 实验代码 #include<stdio.h> main() { struct date { int year; int month