结构体;结构成员访问操作符

news2024/11/25 13:53:00

结构体:
         虽然c语言已经提供了内置类型,比如:char、short、int、long等,但还是不够用,就好比我描述一个人,我需要描述他的身高,体重,年龄,名字等信息,各种信息类型都不大一样。这时c语言为了解决这个问题,就增加了结构体这种自定义的数据类型,让程序员可以自己创造适合的类型。
   注: 结构是一些被称为”成员变量“的值的集合,结构的每一位成员可以是不同类型的变量,比如:标量、数组、指针、甚至是其他的结构体。

结构体的关键字:struct

结构体中涉及两个操作符
.
->

这两个操作符都被成为:成员访问操作符,我们会在下面使用的时候介绍如何使用的

其中成员访问又分为直接间接两种。
结构体是用来描述一个复杂对象,它里面可以包含多个属性,结构体就是创造一个新的类型(自定义类型),这里还是以描述一个人作为一个例子,如下代码所示:

struct person    //person是自定义的名称
{
	int high;//身高
	float weight;//体重
	int age;//年龄
	char name[10];//名字
};//这里的分号必须写

结构体就是这么创建的,也很简单,struct是关键字,不可以缺少,在关键字后面自己任意定义一个名称 ,当然这个名称有实际意义的话最好,接着下面在大括号里将所需要的变量全部陈列出来,最后要在最后的大括号外加上英文分号(这点是最容易丢失的,要切记)。

结构体类型介绍完了,那么下面接着介绍如何创建结构体变量

方式一:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
int main()
{
    struct person c1;
    struct person c2;
    struct person c3;
	return 0;
}

方式二:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
}c1,c2,c3;
int main()
{
    c1;
    c2;
    c3;
	return 0;
}

方法三:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
struct person c1;
struct person c2;
struct person c3;
int main()
{
    c1;
    c2;
    c3;
	return 0;
}

方法一中创建的是局部变量,而方法二、三中创建的是全局变量 ,在实际运用中一定要注意这一点,否则很容易造成程序错误。

结构体变量和之前学习的变量创建还是很类似的,学习的时可以放在一起进行对比,这样可以加深理解,更容易掌握理解。

结构体变量的初始化:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
int main()
{
  
    struct person c1 = {60,180,22,"名字"};
     
	return 0;
}

在这里结构体变量初始化就是按照结构体内包含的变量类型顺序,将每一个被包含的数据按原类型包含在内。就比如上面的代码表示的那样。

如果你不按照结构体里的顺序初始化,那么你必须在初始化的时候指定你初始化的内容,如下面代码表示:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
int main()
{
  
    struct person c1 = {.name="名字",.high=180,.age=22,.weight=60};
     
	return 0;
}

 这里就使用了成员访问操作符当然结构体里面也可以包含结构体,初始化的方法,形式和上面的方法,形式都差不多,下面就举个简单的小例子吧,如下:

#include <stdio.h>
struct person  
{
	int high;
	float weight;
	int age;
	char name[10];
};
struct student
{
    char id[10];
    char gender;
    struct person 1;
};
int main()
{
  
    struct student 1 = {"2023011111","男",{60,180,22,"名字"}};
    
	return 0;
}

以上访问结构体都是直接访问,都是直接访问结构体 ,接下来我们将学习间接访问结构体,这个就需要介绍 -> 这个操作符了(指针)。

语法:指针->成员名

结构体指针用于存储结构体变量的地址,可以通过指针来访问和修改结构体的成员变量。

下面我们还是给出一段代码演示:

在表示指针t指向的结构体成员时,,->age的作用就相当于(*t).age, 推荐使用->运算符,也就是将(*t).age写成t->age

.的优先级高于*

下面是使用指针修改结构体的值 ,很简单,就不细说了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1694151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手一起学习Python NumPy

NumPy 是用于处理数组的 python 库&#xff0c;NumPy 中的数组对象称为 ndarray&#xff0c;它提供了许多支持函数&#xff0c;使得利用 ndarray 非常容易。Numpy官方网址 NumPy 安装 使用pip安装NumPy 模块&#xff1a; pip install numpyNumPy 入门 创建numpy数组&#x…

python-绘制五星红旗(非标准)

完整代码如下&#xff1a; #五星红旗&#xff08;非标准版&#xff09; from turtle import* import math from random import* tracer(0) penup() goto(-640,220) pendown() color(gold,gold) begin_fill() for i in range(5): fd(150) right(144) # 大五角星 penup(…

【Redis】 关于 Redis 哈希类型

文章目录 &#x1f343;前言&#x1f38b;命令介绍&#x1f6a9;hset&#x1f6a9;hget&#x1f6a9;hexists&#x1f6a9;hdel&#x1f6a9;hkeys&#x1f6a9;hvals&#x1f6a9;hgetall&#x1f6a9;hmget&#x1f6a9;hlen&#x1f6a9;hsetnx&#x1f6a9;hincrby&#x1…

C++面向对象程序设计-北京大学-郭炜【课程笔记(十一)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;十一&#xff09;】 1、string&#xff08;重要知识点&#xff09;1.2、string的赋值和链接1.3、比较string1.4、子串1.5、交换string1.6、寻找string中的字符1.7、删除string中的字符1.8、替换string中的字符1.9、在str…

java项目之图书管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的图书管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 系统主要分为管理员角色和用…

宝塔PHP环境安装配置Xdebug

宝塔PHP环境安装配置Xdebug 安装XdebugVSCode安装插件编辑配置文件编辑配置运行调试断点快捷键其他 安装Xdebug 在宝塔中&#xff0c;找到PHP&#xff0c;打开管理页面&#xff0c;选择xdebug扩展&#xff0c;点击操作栏中的安装按钮&#xff08;这里已经安装过了&#xff0c;…

JavaFX学习教程二

一、JavaFX 体系结构 JavaFX 场景图(Scene Graph)是构建 JavaFX 应用程序的起点&#xff0c;一种树状数据结构&#xff0c;用于排列&#xff08;和分组&#xff09;图形对象&#xff0c;以便于逻辑表示。 stage:舞台&#xff0c;操作系统窗口的 JavaFX 表示&#xff0c;是所有…

【Python】 掌握 Flask 请求数据获取的艺术

基本原理 在Web开发中&#xff0c;Flask是一个用Python编写的轻量级Web应用框架。它被广泛用于快速开发简单的Web应用。当用户通过浏览器或其他客户端向服务器发送请求时&#xff0c;Flask需要能够接收和解析这些请求中的数据。这些数据可以是GET请求的查询字符串、POST请求的…

方言和大语言模型

方言多样性及其对语言模型的影响 语言的演变是不可避免的&#xff0c;反映并推动了重大的社会变革和传统。语言接触往往会推动我们说话方式的创新&#xff0c;在美国全球文化的影响下&#xff0c;一种新的叙事正在其语言织锦中展开。 例如&#xff0c;在佛罗里达州南部&#…

springboot2.x3.x的A项目(作为sdk)集成到启动B项目调用2

一 概述 1.1 说明 本博客记录的案例&#xff0c;逻辑是&#xff1a; 项目A读取配置文件&#xff0c;并在service类的方法进行打印输出。项目A作为sdk被项目B进行依赖&#xff0c; 在项目B启动后&#xff0c;进行调用&#xff0c;并且在B进行参数的配置&#xff0c;能够覆盖…

java技术:spring-secrity实现认证、授权

目录 一、依赖 二、逻辑图 三、代码设计 1、WebSecurityConfigurerAdapter的实现类 2、设计登录接口 config配置&#xff1a; 1&#xff09;UserDetailsService实现类重写&#xff1a; 2&#xff09;书写登录实现类&#xff08;调用authenticationManager、可以与后面的…

第十三期Big Demo Day聚焦Web3前沿,FaceN.AI项目路演揭幕创新技术

第十三期Big Demo Day活动即将于2024年5月28日在香港数码港的CyberArena隆重举行。FaceN.AI将亮相本次Big Demo Day&#xff0c;参与精彩的项目路演&#xff0c;展示其在跨链去中心化数字身份、On-chain to Off-chain数据应用、DIDFi探索以及元宇宙与AIGC人格化发展等领域的领先…

kubectl--的陈述式资源管理

目录 一 kubectl 1 查看版本信息 2 查看资源对象简写 3 查看集群信息 4 配置kubectl自动补全 5 node节点查看日志 二 基本信息查看 1 查看 master 节点状态 2 查看命令空间 3 查看命名空间为default的所有资源 4 创建命名空间app 5 删除命名空间app 6 指定pod控…

Magisk + JustTrustMe 安装配置

操作步骤&#xff1a; 安装 Magisk 面具&#xff08;手机root&#xff09;在面具中刷入 LSPosed框架安装 JustTrustMe在LSPosed框架中配置并启动 JustTrustMe 一&#xff0c;Magisk面具 请根据自己手机的机型去root并安装面具&#xff0c;参考链接&#xff1a; https://www…

【全开源】二手车置换平台系统小程序(FastAdmin+ThinkPHP+Uniapp)

二手车置换平台系统 特色功能&#xff1a; 车辆评估&#xff1a;系统提供车辆状况、性能和价值的评估功能&#xff0c;通过拍照、上传图片等方式自动识别车辆信息并给出估价建议&#xff0c;帮助买家和卖家更准确地了解车辆价值。 在线交易&#xff1a;平台提供在线购车、售车…

Ubuntu22.04虚拟机设置静态IP

虚拟机设置静态IP 按下电脑的 “win”键&#xff0c;在弹出的输入框中输入“控制面板”&#xff0c;选中控制面板 1.选择 “网络和Internet” 2.选择 “网络和共享中心” 3.选择 “更改适配器设置” 4.选择 “VMnet8”&#xff0c;双击打开 5.选择 “属性” 找到 “Internet …

WebService的wsdl详解

webservice服务的wsdl内容详解&#xff0c;以及如何根据其内容编写调用代码 wsdl示例 展示一个webservice的wsdl&#xff0c;及调用这个接口的Axis客户端 wsdl This XML file does not appear to have any style information associated with it. The document tree is shown…

【数据分析面试】53.推送消息的分布情况(SQL)

题目 我们有两个表&#xff0c;一个是 notification_deliveries 表&#xff0c;另一个是包含 created 和购买 conversion dates 的 users 表。如果用户没有购买&#xff0c;那么 conversion_date 列为 NULL。 编写一个查询&#xff0c;以获取用户转换前的推送通知总数的分布情…

【前端】从手动部署到自动部署:前端项目进化之路

从手动部署到自动部署&#xff1a;前端项目进化之路 在前端开发的领域内&#xff0c;部署是一个不可忽视的环节。随着项目复杂度的增加和线上更新频率的提升&#xff0c;手动部署逐渐暴露出它的弊端。本文将带你从手动部署过渡到自动部署&#xff0c;完成前端项目进化的重要一…