ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言初阶-结构体

2022-08-08 18:30:44  阅读:896  来源: 互联网

标签:初阶 struct int C语言 char Stu include 结构


C语言初阶之结构体

前言

本文主要为结构体。

一、结构体的声明

1.结构的基础知识

数组:是一组相同类型元素的集合。
结构:是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。

2.结构的声明

定义方式:

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

例:

typedef struct Stu
{
    char name[20];//名字
    int age;//年龄
    char sex[5];//性别
    char id[20];//学号
}Stu;//分号不能丢,Stu是结构体创建的变量

3.结构成员的类型

结构的成员可以是标量、数组、指针,甚至是其他结构体。

4.结构体变量的定义和初始化

结构体变量的定义和初始化:

//声明类型的同时定义变量
struct Point //类型声明
{
    int x;
    char y;
}p1;

//定义结构体变量
struct Point p2;

//初始化:定义变量的同时赋初值
struct Point p3 = {x,"y"};

//结构体嵌套初始化
struct Node
{
    int data;
    struct Point p;
    struct Node* next;
}n1 = {10, {4,5}, NULL};
struct Node n2 = {20, {5, 6}, NULL};

例:

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

struct X
{
    char a;
    int b;
};

struct Stu //类型
{
    //结构的成员变量
    struct X x;
    char name[20];//名字
    int age;//年龄
    char id[20];
}s1,s2;//结构体创建的全局变量

int main()
{
    struct Stu s = {{'x',2},"Wolverine",18,"123456"}; //局部变量(拿类型创建对象)
    printf("%c\n",s.x.a);
    printf("%s\n",s.id);

    struct Stu* ps = &s;
    printf("%c\n",(*ps).x.a);
    printf("%c\n",ps->x.a);

    return 0;
}

二、结构体成员的访问

  1. 结构体变量访问成员
    结构变量的成员是通过点操作符.访问的,点操作符接受两个操作数。

例:

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

struct X
{
    char a;
};

struct Stu
{
    struct X x;
    char name[20];
};

int main()
{
    struct Stu s = {{'x'},"Wolverine"};
    printf("%c\n",s.x.a);
    printf("%s\n",s.name);
    return 0;
}
  1. 结构体指针访问指向变量的成员
    有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。

例:

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

struct X
{
    char a;
};

struct Stu
{
    struct X x;
    char name[20];
};

int main()
{
    struct Stu s = {{'x'},"Wolverine"};
    struct Stu* ps = &s;
    printf("%c\n",(*ps).x.a);
    printf("%c\n",ps->x.a);
    return 0;
}

三、结构体传参

代码:

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

struct S
{
    int data[10];
    int num;
};

//结构体传参
void print1(struct S t)
{
    printf("%d\n", t.num);
}

//结构体地址传参
void print2(struct S* ps)
{
    printf("%d\n", ps->num);
}

int main()
{
    struct S s = {{1,2,3}, 5};

    print1(s); //传值调用
    print2(&s); //传址调用
    return 0;
}

注:结构体传参的时候,要传结构体的地址。

原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

函数调用的参数压栈

栈:是一种数据结构,先进的后出,后进的先出

例:

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

int Add(int x, int y)
{
    int z = 0;
    z = x + y;
    return 0;
}
int main()
{
    int a = 1;
    int b = 2;
    int c = 0;
    c = Add(a,b);

    return 0;
}

image

结尾

标签:初阶,struct,int,C语言,char,Stu,include,结构
来源: https://www.cnblogs.com/yjlin/p/16561988.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有