c语言之结构体概述

一、结构体类型是一种自定义类型

  • c语言有两种类型:原生类型和自定义类型。

二、结构体使用时先定义结构体类型再用类型定义变量

  • 结构体定义时需要先定义结构体类型,然后用类型再定义变量。
  • 也可以在定义结构体类型的同时定义结构体变量。
  • 在函数内部也可以定义类型,但几乎没有人在函数内部定义类型。
#include <stdio.h>
struct people    //定义类型
{
        name[20];
        int age;
}s1;    //定义类型的同时定义变量
typedef struct people   
{
        name[20];
        int age;
}s1;     //将struct people这个结构体类型重命名为s1,s1是类型名而不是变量名
int main(void)
{
        struct people p1;    //定义变量
        s1.age=23;    //结构体变量赋值
        printf("s1.age=%d.\n",s1.age);
        return 0;
}

三、从数组到结构体的进步之处

  • 结构体可以认为是从数组发展而来。数组和结构体是数据结构的范畴了,数组是最简单的数据结构,结构体比数组更复杂些,链表、哈希表比结构体复杂。二叉树、图更复杂些。
  • 数组有两个缺陷:一是定义时必须明确给出大小,且定义后不能更改;二是数组要求所有元素类型必须一致。更复杂的数据结构就致力于解决数组的缺陷。
  • 结构体就是用来解决数组的第二个缺陷。可以把结构体理解为元素类型可以不相同数组。结构体可以完全取代数组,只是在数组可用的范围内,数组比结构体更简单。
#include <stdio.h>
struct score
{
        int a;
        int b;
        int c;
};
int main(void)
{
        int a[3];    //用数组定义三个学生的成绩
        score s;    //用结构体定义了三个学生的成绩
        return 0;
}

四、结构体变量中元素如何访问

  • 数组中元素的访问方式:下标方式和指针方式访问。实际上都是指针方式访问。
  • 结构体中元素访问:用.或者->方式访问。使用变量名访问用.用指针访问用->

总结:结构体的访问方式本质上还是用指针方式访问。

#include <stdio.h>
struct score
{
        int a;
        int b;
        int c;
};
int main(void)
{
        score s;     //int *p=s;*(p+0)=12;
        s.a=12;    //int *p=s;*(p+1)=44;
        s.b=44;    //int *p=s;*(p+2)=44;
        s.c=65;    //结构体元素的访问
        return 0;
}
#include <stdio.h>
struct mystruct
{
        int a;
        double b;
        char c;
};
int main(void)
{
        struct mystruct s1;
        s1.a=12;    //int *p=(int *)s1;*p=12;
        s1.b=4.4;    //double *p=(double *)((int)&s1+sizeof(int));*p=4.4;  
        s1.c='a';    //char *p=(char *)((int)&s1+sizeof(int)+sizeof(double));*p='a';
        return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,659评论 3 44
  • 1.关于c语言结构体的引入 在前面已经介绍了整形(int,long,….),浮点型(flaot,double),字...
    诸葛青云999阅读 2,160评论 0 1
  • 谨记 什么是价值?或许没有多少人能够明白,其实价值并不是实际存在的,它应该是一种体现,比如为城市点缀最美好的一面而...
    长风留言阅读 2,703评论 0 15
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,815评论 1 32
  • 原来,恨嫁都是没有遇到对的人 他隐忍 谦让 霸道 撒娇 心如止水 当遇到对的人做什么都特别美好 神圣与艺术源自生活...
    林夕焱阅读 523评论 2 3

友情链接更多精彩内容