首页 > 其他分享 >C语言学习笔记(七)初识结构体

C语言学习笔记(七)初识结构体

时间:2023-08-04 16:23:00浏览次数:36  
标签:struct int 笔记 C语言 char Stu 初识 printf 结构

初识结构体

结构体的声明

结构体的基础知识

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

结构的声明

struct 标签
{
	值;
	值;
	……
}变量列表;

例:

//定义一个结构体类型

struct Stu//struct - 结构体关键字 Stu - 结构体标签  struct Stu - 结构体类型
{
	char name[20];
    short age;
    char tel[12];
    char sex[5];
};//注意此处的分号必不可少

int main()
{
    struct Stu s;//创建一个结构体变量
    return 0;
}

当创建了结构体变量时,才分配了内存空间

例2

struct Stu
{
	char name[20];
    short age;
    char tel[12];
    char sex[5];
}s1,s2,s3;//s1,s2,s3是三个全局的结构体变量;

int main()
{
    struct Stu s;//s是局部的结构体变量;
    return 0;
}

例3

typedef struct Stu
{
	char name[20];
    short age;
    char tel[12];
    char sex[5];
}Stu;//代表:类型是Stu—>区别于上一个代码,在此处不再是创建全局变量

int main()
{
    Stu s2;//此时只是用Stu也可以创建结构体变量s2
    return 0;
}

结构体成员的类型

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

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

定义结构体变量

方法一:在声明结构体变量的同时定义变量p1

struct Point
{
	int x;
	int y;
}p1;

方法二:直接定义结构体变量p2

struct Point p2;

结构体变量的初始化

例1

初始化结构体同用大括号 { }

typedef struct Stu
{
	char name[20];
    short age;
    char tel[12];
    char sex[5];
}Stu;
int main()
{
    Stu s1 = {"张三",20,13598746325,"男"};//初始化
    struct Stu s2 = {"旺仔",18,"13046956257","女"};//初始化
    return 0;
}

例2

嵌套结构体初始化

struct S
{
	int a;
	char c;
	char arr[20];
	double d;
};

struct T
{
	char ch[10];
	struct S s1;
	char* pa;
};

int main()
{
	char arr[] = "okokgogogo!"
	struct T t1 = {"haha",{6,"a","wowowowow",3.14},arr}//初始化
	return 0;
}

结构体变量的打印

#include <stdio.h>
struct S
{
	int a;
	char c;
	char arr[20];
	double d;
};

struct T
{
	char ch[10];
	struct S s1;
	char *pa;
};

int main()
{
	char arr[] = "okokgogogo!";
	struct T t1 = {"haha",{6,"a","wowowowow",3.14},arr};
	printf("%s\n",t1.ch);//打印haha
	printf("%s\n",t1.s1.arr);//打印wowowowow
	printf("%lf\n",t1.s1.d);//打印3.14
	printf("%s\n",t1.pa);//打印okokgogogo!
	return 0;
}

结构体成员的访问

  • 通过点操作符(.)来进行访问

  • 点操作符接受两个操作数

结构体传参

例1

typedef struct Stu
{
	char name[20];
    short age;
    char tel[12];
    char sex[5];
}Stu;

void Print1(Stu tmp)
{
    printf("name:%s\n",tmp.name);
    printf("age:%d\n",tmp.age);
    printf("tel:%s\n",tmp.tel);
    printf("sex:%s\n",tmp.sex);
}

int main()
{	
    Stu s = {"小李",18,"13549626666","男"};
    Print1(s);
    return 0;
}

例2:用指针传参

typedef struct Stu
{
	char name[20];
    short age;
    char tel[12];
    char sex[5];
}Stu;

void Print2(Stu* pa)//接收的变量类型是指针
{
    printf("name:%s\n",pa->name);
    printf("age:%d\n",pa->age);
    printf("tel:%s\n",pa->tel);
    printf("sex:%s\n",pa->sex);
}

int main()
{	
    Stu s = {"小李",18,"13549626666","男"};
    Print2(&s);//传递的是指针
    return 0;
}

优先选择地址传参!

如果传递一个结构体对象时,结构体过大,系统开销大,所以传地址更好

标签:struct,int,笔记,C语言,char,Stu,初识,printf,结构
From: https://www.cnblogs.com/arongsec/p/17606279.html

相关文章

  • 极光笔记 | 浅谈企业级SaaS产品的客户成长旅程管理(上)—— 分析篇
    本文作者:陈伟(极光用户体验部高级总监)“企业级SaaS产品与C端互联网产品特征差异很大,有些甚至是截然相反,这些特征也会成为后续客户成长旅程的重要影响变量。本文就如何设计并服务好企业级SaaS产品客户成长旅程进行分析总结,希望对你有所启发。”大家肯定好奇,标题为什么不直接借用c端互......
  • nio/mina/openfire阅读笔记
    minajavadocMina-模拟同步请求Mina源码分析http://michael-softtech.iteye.com/blog/1145458Mina2.0框架源码剖析(一)Mina2.0框架源码剖析(二)Mina2.0框架源码剖析(三)Mina2.0框架源码剖析(四)Mina2.0框架源码剖析(五)Mina2.0框架源码剖析(六)Mina2.0框架源码剖析(七)Mina2.0框架......
  • Java 大神整理的 Spring 笔记,强得起飞 !
    强烈推荐大家阅读:阿里大佬的spring学习笔记,基本涵盖了Spring所有核心知识点及原理,建议大家至少看3遍,便可成为一个Spring高手,超越99%的人,学完之后再去学Spring的其他框架,比如SpringBoot,简直就是小意思,文末获取高清pdfJava程序员加餐福利:小咖最近整理一份BAT面试资料,覆盖了Java核心......
  • 前些年使用jQuery笔记代码
    //jqueryformjsonfunctionformJson(id){vararr=$("#"+id).serializeArray();//form表单序列化varjsonStr="";jsonStr+='{';for(vari=0;i<arr.length;i++){jsonStr+='"'......
  • C语言.多级指针
    #include<stdio.h>#include<stdlib.h>#include<string.h>intmain(){longaa=123;longaaa=&aa;//warning:initializationof‘longint’from‘longint*’makesintegerfrompointerwithoutacast//这里,编译器......
  • STM32学习笔记
    目录时钟配置时钟配置时钟树系统时钟倍频到168MHzvoidSystemClock_Config(void){RCC_ClkInitTypeDefRCC_ClkInitStruct;RCC_OscInitTypeDefRCC_OscInitStruct;/*EnablePowerControlclock*/__HAL_RCC_PWR_CLK_ENABLE();/*Thevoltage......
  • 指针进阶(C语言)
    指针进阶头文件#include<stdio.h>#include<stdlib.h>#include<string.h>字符指针intmain(){//字符指针chararr1[]="abcdef";chararr2[]="abcdef";char*p1="abcdef";char*p2="abcdef";......
  • Vue学习 2.0 版本笔记
    Vue学习一、前端知识体系HTML(结构):超文本标记语言(HyperTextMarkupLanguage),决定网页的结构和内容CSS(表现):层叠样式表(CascadingStyleSheets),设定网页的表现样式JavaScript(行为):是一种弱类型脚本语言,其源代码不需经过编译,而是由浏览器解释运行,用于控制网页的行为表现层(CSS)CS......
  • 个人笔记,关于css样式
    /*引入样式<linkhref="https://fonts.font.im/css?family=Open+Sans"rel="stylesheet"type="text/css">*/html{/*px表示“像素(pixels)”:基础字号为10像素*/font-size:20px;/*Googlefonts输出的CSS*/font-family:'Op......
  • YOLO系列代码调试笔记
    环境:Windows10、Python3.8.5、torch1.13.0+cu116、torchvision0.14.0+cu116工程:https://github.com/abeardear/pytorch-YOLO-v1bug1:#resnet=models.resnet50(pretrained=True)resnet=models.resnet50(weights=ResNet50_Weights.DEFAULT)因为版本原因,加载预......