前言

在C语言中,结构是另一种用户自定义的可用数据类型,它允许您存储不同的数据类型,结构体是属于自定义数据结构。

1.结构体的创建

1.1 第一种方法

    struct tag{
type name;
type name;
.........
};

tag 是结构体标签

type 数据类型

name 类型名字

1.2 第二种方法

    struct tag{
type name;
type name;
.........
}tags;

结尾后的tags 是结构的变量,是全局变量,也可以多指很多结构变量。

1.3 全局结构体和局部结构体的声明

全局结构体的声明是声明在函数外,局部结构体是声明在函数内。

2.结构体的使用

2.1 局部结构体的声明 & 初始化

    struct tag new_name = {value1, value2, {value3, value4}, .....};

new_name 声明的新名字

value 声明的值,如果有多个值,需要使用{}括起来

value前面要有类型

2.1.1 指针方法

指针声明方法必须先对结构体进行声明,然后才能用指针声明

例一:

    #include <stdio.h>
int main(){
struct Books{
int a;
int arr1[5];
char arr2[5];
};
struct Books book = {1, {4, 3}, {'g', 'a'}};
struct Books* pb = &book;
return 0;
}struct Books book = {1, {4, 3}, {'g', 'a'}};
struct Books book = {1, {4, 3}, {'g', 'a'}};
struct Books* pb = &book;

这个就是结构体的声明指针方法

2.2 全局结构体全局的使用 & 初始化

和局部结构体的声明和初始化一样

3.结构体的输出

3.1 使用结构体变量的输出

结构体声明的变量 . 结构体中的值

使用如下

    #include <stdio.h>
struct Books{
int a;
int arr[5];
}
int main(){
struct Books book;
book.a = 4;
printf("%d", book.a);
return 0;
}

3.2 使用指针变量的输出

3.2.1 第一种方法

指针变量 -> 结构体中的值

使用如下

    #include <stdio.h>
struct Books{
int a;
int arr1[10];
char b;
};
int main(){
struct Books b;
struct Books* pb = &b;
pb -> a = 1;
printf("%d", pb -> a);
return 0;
}

3.2.2第二种方法

(*指针变量) . 结构体中的值

使用如下

    #include <stdio.h>
struct Books{
int a;
int arr[2];
char b;
}
int main(){
struct Books b;
struct Books* pb = &b;
(*pb).a = 1;
printf("%d", (*pb).a);
return 0;
}

4.结构体做函数的参数 & 结构体指针做函数的参数

4.1结构体变量做参数

    #include <stdio.h>
struct Books{
int a;
int arr[5];
char name[5];
};
void Print(struct Books b){
printf("%d,%c", b.a, b.name[0]);
}
int main(){
struct Books book = {5, {4,2,3}, {'s','a','v'}};
Print(book);
}

4.2结构体指针做参数

    #include <stdio.h>
struct Books{
int a;
int arr[5];
char name[5];
};
void Print(struct Books* b){
printf("%d,%c", b->a, b->name[0]);
}
int main(){
struct Books book = {5, {4,2,3}, {'s','a','v'}};
Print(&book);
}

4.3 两种定义在内存中的模式

4.1的方式是在函数中将变量又重新拷贝一份,占用更多的空间,而且用完就会被释放,不能修改结构体内的值;而4.2的方法是将结构体的地址放入函数里,函数操作地址,内存的占用非常的少,能直接修改函数体内的值。

C语言基础-结构体基础的更多相关文章

  1. go 基础 结构体

    结构体是类型中带有成员的复合类型.go语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. go语言中的类型可以被实例化,使用new和&构造类型实例的类型是类型的指针. 结构体 ...

  2. C++指针和结构体基础知识

    学习C++首先要回忆起C语言当中的指针和结构体知识,本文作者将通过一段代码来总结指针和结构体基础知识:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使 ...

  3. 35深入理解C指针之---结构体基础

    一.结构体基础 1.定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合 2.特征: 1).结构体可以使得不同类型的数据进行结合 2).结构体可以使用内置的数据类型,包括指针 3). ...

  4. C基础--结构体

    C语言,结构体语法: 1.定义结构体类型: struct 结构体名称 { 成员类型 成员名称1; 成员类型 成员名称2; ... }; 例:struct Date { int year ; int m ...

  5. go语言学习-结构体

    结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...

  6. Go语言中结构体的使用-第2部分OOP

    1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...

  7. Go语言 6 结构体、方法和接口

    文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 结构体(struct)是由一系列具有相同类型或不同类 ...

  8. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  9. C语言的结构体和C++结构体的区别

    关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...

  10. 01.C语言关于结构体的学习笔记

    我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...

随机推荐

  1. Go语言网络编程: 模拟实现DNS服务器

    环境: 两台虚拟机,不限系统 写在前面 DNS服务器是干什么的?DNS服务器(Domain Name Server,域名服务器)是进行域名和与之相对应的IP地址进行转换的服务器,保存了一张域名和与之相 ...

  2. js如何引入高德地图API?

    准备 成为开发者并创建 key 1.登录控制台 登录 高德开放平台控制台,如果没有开发者账号,请 注册开发者. 2.创建 key 进入应用管理,创建新应用,新应用中添加 key,服务平台选择 Web端 ...

  3. CefSharp自定义缓存实现

    大家好,我是沙漠尽头的狼. 上文介绍了<C#使用CefSharp内嵌网页-并给出C#与JS的交互示例>,本文介绍CefSharp的缓存实现,先来说说添加缓存的好处: 提高页面加载加速:Ce ...

  4. js函数-参数默认值

    1. 在es6之前必须通过函数内部实现 就像以下的几种情况: function example(a,b){ var a = arguments[0] ? arguments[0] : 1;//设置参数 ...

  5. Vue3实现组件级基类的几种方法

    Vue3的组件有三种代码组织方式 纯Option API (不含setup) option API + setup 纯 setup (即composition API) 对于这三种形式,设置基类的方法 ...

  6. 推荐Visual Studio四款好用插件

    我要推荐的4个插件,合理使用可以提高工作效率,分别是: 1.Markdown Editor 可以在vs预览markdown文件的插件 2.Add New File 我们原本在vs中新建文件,需要添加新 ...

  7. Python工具箱系列(三十)

    PostgreSQL MySQL的口号是"世界上最流行的开源关系型数据库",而PostgreSQL的Slogan则是"世界上最先进的开源关系型数据库(PostgreSQL ...

  8. Notion 中文:客户端、网页端汉化方案

    Notion 官方已经正式公布将会支持中文.不过距离正式发布中文版,可能还有一段时间. Notion 的汉化方案 目前,Notion 汉化方案有两种: 客户端汉化 此方法本质上也是在客户端中增加脚本, ...

  9. Golang常用语法糖

    1.名字由来 语法糖(Syntactic sugar)的概念是由英国计算机科学家彼得·兰丁提出的,用于表示编程语言中的某种类型的语法,这些语法不会影响功能,但使用起来却很方便.语法糖,也称糖语法,这些 ...

  10. 2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs[i]和strs[j]所有的字符随意去排列能组成回文串, 那么说(i,j)叫做一个互补

    2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs[i]和strs[j]所有的字符随意去排列能组成回文串, 那么说(i,j)叫做一 ...