← 返回首页
C语言系列教程(三十二)
发表时间:2021-03-30 16:23:31
指向结构体的指针

当一个指针变量指向结构体时,我们就称它为结构体指针。

获取结构体成员的方式有以下两种: - (*pointer).memberName - pointer->memberName

第一种写法中,.的优先级高于,(pointer)两边的括号不能少。如果去掉括号写作pointer.memberName,那么就等效于(pointer.memberName),这样意义就完全不对了。

第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。上面的两种写法是等效的。

实例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SCORE_LEN 5
#define SCHOOL_LEN 50

typedef struct {
    char* name;
    int age;
    int score[SCORE_LEN];
    char school[SCHOOL_LEN];
} Students;

int main() {

    Students s;
    Students* pt;

    s.name = "张三";
    s.age = 18;
    int arr[]={76,80,77,84,90};
    memcpy(s.score,arr,sizeof(int)*SCORE_LEN);
    strcpy(s.school,"西安电子科技大学");

    printf("姓名:%s\n",s.name);
    printf("年龄:%d\n",s.age);
    printf("------考试分数------\n");
    for(int i=0;i<SCORE_LEN;i++){
        printf("%d ",s.score[i]);
    }
    printf("\n学校:%s\n",s.school);
    printf("\n----------------\n");
    pt = &s;
    printf("姓名:%s\n",pt->name);
    printf("年龄:%d\n",pt->age);
    printf("------考试分数------\n");
    for(int i=0;i<SCORE_LEN;i++){
        printf("%d ",pt->score[i]);
    }
    printf("\n学校:%s\n",pt->school);

    printf("\n----------------\n");
    printf("姓名:%s\n",(*pt).name);
    printf("年龄:%d\n",(*pt).age);
    printf("------考试分数------\n");
    for(int i=0;i<SCORE_LEN;i++){
        printf("%d ",(*pt).score[i]);
    }
    printf("\n学校:%s\n",(*pt).school);

   return 0;
}

运行结果: