用指针访问结构数组

Posted 天“码”行空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用指针访问结构数组相关的知识,希望对你有一定的参考价值。

前面我们已经学习过结构指针和结构数组的概念,我们知道可以用指针访问和引用数组,由此可知也可以用指针访问结构数组。即一个指针变量可以访问普通的数组,也可以访问结构数组。

typedef struct student 

   char ID[10];
   char name;
   char sex;
   float score;
STUDENT;
STUDENT stu[30] = 
   "202001","张三",'M',85,
   "202002","李四",'M',90,
   "202003","王五",'M',95,
   "202004","赵六",'F',100
                   ;

如上述程序,已经声明了一个具有30个元素的结构数组stu,则定义一个结构指针p并将其指向结构数组stu首元素的方法为:STUDENT *p = stu;或者STUDENT *p; p = &stu[0];//p保存的是stu[0]的地址,故p指向stu的第一个元素stu[0]的首地址。因此,可以用指向运算符来引用此结构成员。p->name即stu[0].name,而p+1指向stu[1],以此类推。

如果p的初值为指向数组的首元素,则p增1后p指向下一个元素的起始地址

//用结构指针访问数组成员
#include<stdio.h>

typedef struct student 

   char ID[10];
   char name;
   char sex;
   float score;
STUDENT;
int main(void)

    STUDENT stu[4] = 
       "202001","张三",'M',85,
       "202002","李四",'M',90,
       "202003","王五",'M',95,
       "202004","赵六",'F',100
                      ;
    STUDENT *p;
    for(p = stu; p < stu+4; p++)
    
         printf("address of p is :%d\\n", p);
         printf("%s %s %c %.1f\\n", p->ID, p->name, p->sex, p->score);
    

    printf("\\n");
    return 0;

首先,程序声明并初始化了一个STUDENT结构类型的名为stu的数组。然后定义一个名为p的结构指针,用于指向stu的首元素。接着使用一个for循环输出所有元素,该循环每次迭代时,都将数组元素的指针递增。

以上是关于用指针访问结构数组的主要内容,如果未能解决你的问题,请参考以下文章

C++结构体指针数组如何分配空间,用new

C语言 二维数组有没有默认初值?多少?

C语言中用const声明全局变量赋初值和不赋初值有何区别?变量存放位置有啥不一样?

C#如何调用C++的DLL的结构体数组指针

C++入门基础教程:C语言的指针与结构体到底怎么用?

C++入门基础教程:C语言的指针与结构体到底怎么用?