前言

在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. 18-html压缩

    const { resolve } = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); modul ...

  2. 一文搞懂JavaScript数组的特性

    前言 数组是几乎所有编程语言的基础语法,JavaScript因为语法特性,之前缺少一些集合类对象,对数组的使用就会更多一些,因此我们更需要理解数组知识. 然而大部分人对数组都已经非常熟悉了,所以本文将 ...

  3. 笔记:C++学习之旅---顺序容器

    笔记:C++学习之旅---顺序容器 STL = Standard Template Library   标准库模版 容器可以使用范围for输出或者迭代器进行输出 一个容器就是一些特定类型对象的集合.顺 ...

  4. Python + 超级鹰 识别图形验证码

    前言: 一.下载 1.进入官网:http://www.chaojiying.com/,注册完成后,进行登录 2.点击开发文档,点击Python语言示例 3.进行示例下载 4.解压后的文件 注:关注公众 ...

  5. Swift WisdomProtocol 面向协议编程(下)

    WisdomProtocol 面向协议编程(下) @[TOC] WisdomProtocol SDK 面向协议编程 # Welcome to use WisdomProtocol WisdomProt ...

  6. 分布式搜索引擎Elasticsearch基础入门学习

    一.Elasticsearch介绍 Elasticsearch介绍 Elasticsearh 是 elastic.co 公司开发的分布式搜索引擎. Elasticsearch(简称ES)是一个开源的分 ...

  7. 2021-01-07:cdn加速是什么原理?

    福哥答案2021-01-07:[答案来自此链接:](https://www.zhihu.com/question/438234873)CDN(Content Delivery Network):内容分 ...

  8. 2021-09-29:不同路径。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为

    2021-09-29:不同路径.一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ).机器人每次只能向下或者向右移动一步.机器人试图达到网格的右 ...

  9. 百度飞桨(PaddlePaddle) - PaddleOCR 文字识别简单使用

    百度飞桨(PaddlePaddle)安装 OCR 文字检测(Differentiable Binarization --- DB) OCR的技术路线 PaddleHub 预训练模型的网络结构是 DB ...

  10. values_list() 元组形式显示查询结果

    values_list() 元组形式显示查询结果 name,age为数据库的两个列 Student.objects.values_list('name','age') values_list() 元组 ...