C语言基础-结构体基础
文章目录
前言
在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语言基础-结构体基础的更多相关文章
- go 基础 结构体
结构体是类型中带有成员的复合类型.go语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. go语言中的类型可以被实例化,使用new和&构造类型实例的类型是类型的指针. 结构体 ...
- C++指针和结构体基础知识
学习C++首先要回忆起C语言当中的指针和结构体知识,本文作者将通过一段代码来总结指针和结构体基础知识:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使 ...
- 35深入理解C指针之---结构体基础
一.结构体基础 1.定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合 2.特征: 1).结构体可以使得不同类型的数据进行结合 2).结构体可以使用内置的数据类型,包括指针 3). ...
- C基础--结构体
C语言,结构体语法: 1.定义结构体类型: struct 结构体名称 { 成员类型 成员名称1; 成员类型 成员名称2; ... }; 例:struct Date { int year ; int m ...
- go语言学习-结构体
结构体 go语言中的结构体,是一种复合类型,有一组属性构成,这些属性被称为字段.结构体也是值类型,可以使用new来创建. 定义: type name struct { field1 type1 fie ...
- Go语言中结构体的使用-第2部分OOP
1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...
- Go语言 6 结构体、方法和接口
文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 结构体(struct)是由一系列具有相同类型或不同类 ...
- C语言中结构体赋值问题的讨论
今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...
- C语言的结构体和C++结构体的区别
关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...
- 01.C语言关于结构体的学习笔记
我对于学习的C语言的结构体做一个小的学习总结,总结如下: 结构体:structure 结构体是一种用户自己建立的数据类型,由不同类型数据组成的组合型的数据结构.在其他高级语言中称为记录(record) ...
随机推荐
- Gin框架快速入门
github地址: https://github.com/gin-gonic/gin 初体验 安装: $ go get -u github.com/gin-gonic/gin 简单实例: packag ...
- Golang网络编程: DNS子域名爆破
域名系统(Domain Name System,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.这就如同一个地址簿,根据域名来指向IP地 ...
- Springboot+Mysql 图书管理系统【源码+sql】
java项目 学生图书管理系统 (源码+数据库文件)技术框架:java+springboot+mysql后端框架: Spring Boot.Spring MVC.MyBatis Plus前端界面: T ...
- extend笔记
JavaScript面向对象 继承extend 1. 概念(主要用途) 将子类中的共性代码 ( 属性和方法 ) 抽取出来 放到父类中 每当有一个新的子类需要用到共性的属性或者方法时 不需要在自己内容复 ...
- 一文搞懂JavaScript数组的特性
前言 数组是几乎所有编程语言的基础语法,JavaScript因为语法特性,之前缺少一些集合类对象,对数组的使用就会更多一些,因此我们更需要理解数组知识. 然而大部分人对数组都已经非常熟悉了,所以本文将 ...
- java 实现逻辑分页
//逻辑分页PageModel model = new PageModel();long total = list.size();model.setTotal(total);model.setPage ...
- 突破传统监测模式:业务状态监控HM的新思路
作者:京东保险 管顺利 一.传统监控系统的盲区,如何打造业务状态监控. 在系统架构设计中非常重要的一环是要做数据监控和数据最终一致性,关于一致性的补偿,已经由算法部的大佬总结过就不在赘述.这里主要讲如 ...
- 【Dotnet 工具箱】JIEJIE.NET - 强大的 .NET 代码混淆工具
你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具和组件,希望对您有用! JIEJIE.NET - 强大的 .NET 代码混淆工具 JIEJIE.NET JIEJIE.NET ...
- 讯飞星火大模型 与New Bing实测对比
昨天科大讯飞发布了讯飞星火认知大模型,在发布会现场实测大模型的7种核心能力,并发布了它在教育.办公.汽车.数字员工领域的应用成果.科大讯飞董事长刘庆峰表示:认知大模型展示了通用人工智能的曙光,讯飞星火 ...
- Webpack5构建性能优化:构建耗时从150s到60s再到10s
作者:京东科技 牛志伟 近期对Webpack5构建性能进行了优化,构建耗时从150s到60s再到10s,下面详细讲解下优化过程. 优化前现状 1.历史项目基于Vue3 + Webpack5技术栈,其中 ...