我是靠谱客的博主 机智火龙果,最近开发中收集的这篇文章主要介绍C语言自学篇:结构体的理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

结构体的一般规范形式为:

Struct tag
{
member - list;
}variable - list;

int main()

{

struct tag s1;   // ①

}

其中,Struct是结构体关键字,tag是结构体标签,Struct tag合起来叫做结构体类型

声明成功好了结构体类型后,用一个大括号括起来,然后在大括号里面定义结构体标签的变量,即这个结构体标签具有的属性,如结构体标签是学生,那么我给它定义的变量就有学生的性别sex,手机号码telphone,学生的名字name等等。定义完成变量之后,在大括号后面可以创建全局变量,即结构体变量,如将variable-list换成s1,s2,s3等等,即可定义全局变量s1,s2,s3等等。

例;

Struct stu
{
char name[10];
char sex[4];
int tel[12];
short age;
}s1, s2, s3;

定义完成结构体类型之后,即可在接下来的函数中使用,如第①步,创建结构体类型,s1在这里是局部变量,仅能在函数范围内使用,一般我们尽量还是使用局部变量比较好,全局变量尽量少设置。

如果想将结构体类型名转换一下,如我想将Struct tag这个结构体类型名换成Stu,此时则需要使用到typedef关键字

例:源代码:

typedef Struct tag
{
member - list;
}Stu;

int main()

{

Struct tag s2;

Stu s1;   //②

}

如第②步。此时既可以使用struct tag去定义一个结构体变量s2,也可以使用Stu去定义一个s1结构体变量。

结构体类型中还可以定义其他结构体类型,使用方式是用一个大括号{}括起来,然后挨个在大括号内赋值另外一个结构体内定义的变量。

如:源程序

#include <stdio.h>
struct stu
{
    short age;
    int tele[12];
    char sex[4];
    char name[10];
};
struct tag
{
    char name1[10];
    char sex[4];    
    struct stu s;
    int tele1[12];
};
int main()
{
    struct tag s1 = { "张三","男",{15,15997595853,'男','李四'},13527781462 };
}

想要对结构体内部的变量进行引用的话需要使用int main内定义的结构体变量假如是s1,那么就是s1.加上定义s1的结构体内的变量,例如;

源代码:

#include <stdio.h>
struct stu
{
    short age;
    int tele;
    char sex[4];
    char arr[22];
};
struct tag
{
    char name1[10];
    char sex[4];    
    struct stu s;
    int tele1;
    char* pa;
};
void main()
{
    char arr[] = "hello world";
    struct tag s1 = { "张三","男",{15,15997595853,"男","hello world"},13527781462,arr};
    printf("%dn", s1.s.age);
    printf("%sn", s1.s.arr);

    printf("%sn", s1.name1);
    printf("%sn", s1.sex);

    printf("%sn", s1.pa);

想要通过函数的方式引用结构体内部的变量以此得到它们的值时,可以通过传值调用,也可以通过传址调用。如果是传址调用,则需要使用函数定义接收结构体变量的指针变量通过->箭头加上变量名引用,如果是传值调用,则只需要通过函数接受结构体变量的变量加一个小数点.再加上结构体变量即可;例如以下代码的红色字体内容;

源代码:

#include <stdio.h>
struct tag
{
    char name1[10];
    char sex[4];    
    char tele1[12];
    char* pa;
};
void print(struct tag tmp)
{
    printf("name:  %sn", tmp.name1);
    printf("sex:   %sn", tmp.sex);
    printf("tele1: %sn", tmp.tele1);

}
void print(struct tag* ps)
{
    printf("name:  %sn", ps->name1);
    printf("sex:   %sn", ps->sex);
    printf("tele1: %sn", ps->tele1);

}
void main()
{
    char arr[] = "hello world";
    struct tag s1 = { "张三","男","13527781462",arr};
    print(s1);
    print(&s1);
}

一般建议使用传址调用,因为如果一旦创建的结构体变量s1的内容过大,它需要的内存空间就多,如果是通过传值调用的方式,则还需要同时拷贝一份跟着分空间大小一摸一样的内存空间,这就造成了空间浪费,而如果是传址调用的话,就仅仅只需要传输一个s1的首地址,这样就可以很大程度上的节约内存空间,防止浪费。

最后

以上就是机智火龙果为你收集整理的C语言自学篇:结构体的理解的全部内容,希望文章能够帮你解决C语言自学篇:结构体的理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部