------构造类型数据—结构体---- + ----函数-----

构造类型数据——结构体

1)结构体的基本概念

结构体(struct)是C语言(以及其他一些编程语言)中用于将不同类型的数据组合成一个单一类型的方式。这种数据类型允许你将多个变量(可能是不同类型)组合成一个单一的实体。结构体中的每个成员都可以有它自己的数据类型。

以下是一个简单的结构体定义示例:

#include <stdio.h>// 定义一个名为Student的结构体
struct Student {char name[50];int age;float score;
};int main() {// 声明一个Student类型的变量struct Student stu1;// 为stu1的成员赋值strcpy(stu1.name, "张三");stu1.age = 20;stu1.score = 90.5;// 输出stu1的信息printf("Name: %s, Age: %d, Score: %.1f\n", stu1.name, stu1.age, stu1.score);return 0;
}

2)结构体数组

结构体数组是一个可以包含多个结构体元素的数组。每个元素都是结构体类型的一个实例。

以下是一个结构体数组的示例:

#include <stdio.h>
#include <string.h>struct Student {char name[50];int age;float score;
};int main() {// 声明一个包含3个Student类型元素的数组struct Student students[3];// 为数组中的元素赋值strcpy(students[0].name, "张三");students[0].age = 20;students[0].score = 90.5;strcpy(students[1].name, "李四");students[1].age = 21;students[1].score = 85.0;// ... 可以继续为students[2]赋值// 输出所有学生的信息for (int i = 0; i < 3; i++) {printf("Name: %s, Age: %d, Score: %.1f\n", students[i].name, students[i].age, students[i].score);}return 0;
}

3)指向结构体类型的指针变量

指向结构体类型的指针变量用于存储结构体类型变量的内存地址。你可以使用这个指针来访问结构体中的成员。

以下是一个指向结构体类型的指针变量的示例:

#include <stdio.h>
#include <string.h>struct Student {char name[50];int age;float score;
};int main() {// 声明一个Student类型的变量并为其赋值struct Student stu1;strcpy(stu1.name, "张三");stu1.age = 20;stu1.score = 90.5;// 声明一个指向Student类型的指针变量并使其指向stu1struct Student *p = &stu1;// 使用指针访问stu1的成员并输出其信息printf("Name: %s, Age: %d, Score: %.1f\n", p->name, p->age, p->score);return 0;
}

注意,在使用->运算符时,左侧是指向结构体的指针,右侧是结构体的成员名。这与.运算符不同,.运算符用于直接访问结构体变量的成员。

好的,下面我会逐一解释您列出的函数相关的主题,并给出相应的代码示例。

函数

1)函数的基本概念,函数的定义、说明和调用

函数是执行特定任务的代码块,它接受输入(参数),处理这些输入,然后可能返回一个值。

定义

#include <stdio.h>// 定义一个函数
void printHello() {printf("Hello, World!\n");
}int main() {// 调用函数printHello();return 0;
}

2)函数的返回值

函数可以返回一个值给调用者。这个值在函数中使用return语句返回。

示例

#include <stdio.h>// 定义一个返回整数值的函数
int add(int a, int b) {return a + b;
}int main() {int sum = add(3, 5); // 调用函数并接收返回值printf("The sum is %d\n", sum);return 0;
}

3)参数的传递,数值传递和地址传递

数值传递:在C语言中,默认情况下,参数是通过值传递的。这意味着函数会接收参数值的副本。

地址传递(或引用传递):在C语言中,虽然没有直接的引用传递,但我们可以使用指针来模拟地址传递。

示例(地址传递):

#include <stdio.h>// 使用指针(地址传递)修改变量的值
void increment(int *p) {(*p)++;
}int main() {int x = 5;increment(&x); // 传递x的地址给函数printf("x is now %d\n", x); // 输出6return 0;
}

4)函数的嵌套调用

一个函数可以调用另一个函数,而被调用的函数本身也可以调用其他函数,这就是函数的嵌套调用。

示例

#include <stdio.h>void printTwice(char *str) {printf("%s\n", str);printHello(); // 嵌套调用另一个函数
}void printHello() {printf("Hello, World!\n");
}int main() {printTwice("First message");return 0;
}

5)数组作为函数参数

在C语言中,数组可以通过指针传递给函数。当我们传递数组给函数时,实际上传递的是数组首元素的地址。

示例

#include <stdio.h>// 使用数组作为函数参数
void printArray(int arr[], int size) {for (int i = 0; i < size; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int numbers[] = {1, 2, 3, 4, 5};printArray(numbers, 5); // 传递数组和大小给函数return 0;
}

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

结合Boosting理论与深度ResNet:ICML2018论文代码详解与实现

代码见&#xff1a;JordanAsh/boostresnet: A PyTorch implementation of BoostResNet 原始论文&#xff1a;Huang F, Ash J, Langford J, et al. Learning deep resnet blocks sequentially using boosting theory[C]//International Conference on Machine Learning. PMLR, 2…

axure9设置组件自适应浏览器大小

问题&#xff1a;预览时不展示下方的滚动条 方法一&#xff1a;转化为动态面板 1.在页面上创建一个矩形 2.右键-转化为动态面板 3.双击进入动态面板设置 4.设置动态面板矩形的颜色 5.删除原来的矩形 6.关闭动态面板&#xff0c;点击预览 7.此时可以发现底部没有滚动条了 方法…

AI大模型之争:通用与垂直,谁将拔得头筹?

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

移植案例与原理 - startup子系统之syspara_lite系统属性部件 (2)

系统属性部件syspara_lite负责提供获取与设置操作系统相关的系统属性&#xff0c;包括默认系统属性、OEM厂商系统属性和自定义系统属性。为满足OpenHarmony产品兼容性规范&#xff0c;产品解决方案需要实现获取设备信息的接口&#xff0c;如&#xff1a;产品名、品牌名、厂家名…

苹果Mac电脑遭恶意软件攻击 Mac第三方恶意软件删除不了

苹果Mac电脑一直以来都以安全性和稳定性著称&#xff0c;许多用户认为Mac电脑不会受到恶意软件的侵害&#xff0c;但事实上&#xff0c;Mac电脑也不是绝对安全的&#xff0c;近年来&#xff0c;有越来越多的恶意软件针对Mac电脑进行攻击&#xff0c;甚至有些恶意软件可以绕过苹…

如何看待SD3 版本,和SDXL相比有何优势?

胖友们好&#xff01;&#xff01;&#xff01;痴迷AI的本枕又来写Stable Diffusion了…… SD社区群众们翘首企盼的SD3的weights总算在huggingface上发布了 于是我也在当天非常激动地用ComfyUI生成了一些图像…… 这篇文章算是半个评测半个心得吧&#xff0c;因为有些东西是…

解禁日大涨,爱玛科技的投资前景值得信任吗?

6月17日&#xff0c;爱玛迎来6.28亿股、金额超190亿元的解禁&#xff0c;占总股本72.91%。不过&#xff0c;爱玛股价在巨量解禁中反而迎来涨势&#xff0c;因为这部分股票中&#xff0c;创始人张剑持有的限售股数量几乎就占了爱玛总股本的七成。某种意义上&#xff0c;市场认为…

Windows系统下制作Windows Server系统U盘启动及安装指导

Windows系统下制作Windows Server系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口)&#xff1b;下载好对应的系统镜像&#xff1b;下载RUFUS或者软通碟U盘制作启动软件&#xff1b; 二、Windows操作系统下制作U盘启动&#xff08;这里以使用RUFUS软件…

面向对象和面向过程

Python完全采用了面向对象的思想&#xff0c;是真正面向对象的编程语言&#xff0c;完全支持面向对象的基本功能&#xff0c;例如&#xff1a;继承、多态、封装等。 Python支持面向过程、面向对象、函数式编程等多种编程方式。而Java编程语言支持面向对象的编程方式&#xff0…

基于WPF技术的换热站智能监控系统16--动态数据绑定

1、实现思路 1&#xff09;实时读取到的数据绑定到前台UI控件上&#xff0c;这个通过MVVM模式实现&#xff0c;同时注意实时读取必须通过任务task异步方式&#xff0c;这就需要读取PLC数据。 2&#xff09;UI控件的动作&#xff0c;如开或关水泵&#xff0c;必定能够将值写入…

Java基础 - 练习(一)打印等腰三角形

Java基础练习 打印等腰三角形&#xff0c;先上代码&#xff1a; public static void main(String[] args) {// 打印等腰三角形System.out.println("打印等腰三角形&#xff1a;");isoscelesTriangle(); } public static void isoscelesTriangle() {// for循环控制行…

ollama模型CPU轻量化部署

一、定义 ollama 定义环境部署demo加载本地模型方法基本指令关闭开启ollamaollama 如何同时 运行多个模型, 多进程ollama 如何分配gpu修改模型的存储路径 二、实现 ollama 定义 ollama 是llama-cpp 的进一步封装&#xff0c;更加简单易用&#xff0c;类似于docker. 模型网址…

【深度学习】AI换脸,EasyPhoto: Your Personal AI Photo Generator【一】

论文&#xff1a;https://arxiv.org/abs/2310.04672 文章目录 摘要IntroductionTraining Process3 推理过程3.1 面部预处理3.3 第二扩散阶段3.4 多用户ID 4 任意ID5 实验6 结论 下篇文章进行实战。 摘要 稳定扩散Web UI&#xff08;Stable Diffusion Web UI&#xff0c;简称…

Linux_理解程序地址空间和页表

目录 1、进程地址空间示意图 2、验证进程地址空间的结构 3、验证进程地址空间是虚拟地址 4、页表-虚拟地址与物理地址 5、什么是进程地址空间 6、进程地址空间和页表的存在意义 6.1 原因一&#xff08;效率性&#xff09; 6.2 原因二&#xff08;安全性&#xff09; …

DOS INT 21H中断 2号功能暗改AL

注意此时AX0200&#xff0c;DX0057 执行INT 21H之后&#xff1a; 可以看到执行完“??? [BXSI]”之后&#xff0c;AL就变为了57H&#xff0c;和DL相同。 部分INT 21H功能表&#xff1a; 所以究竟是什么原因呢&#xff1f; -------------------------------------------…

MDK 代码烧录到RAM区运行

MDK 代码烧录到RAM区运行 环境配置设置分散加载文件启动文件修改设置外部调试器烧录 建立函数入口半主机问题导致BKPT 0xAB 有一个需求&#xff0c;除了IAR以及GCC的版本工程还需要MDK版本&#xff0c;为了实现最小的工程环境&#xff0c;flash烧录算法也没有&#xff0c;这时需…

【C++】:list容器的基本使用

目录 &#x1f680;前言一&#xff0c;list的介绍二&#xff0c;list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插&#xff0c;头删&#xff0c;尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear &#x1f680;前言 list中的接口比较多&#xff…

SpringBootWeb 篇-入门了解 Apache POI 使用方法

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Apache POI 概述 2.0 使用 Apache POI 读写 Excel 文件 2.1 写入 Excel 文件 2.2 写入 Excel 文件代码演示 2.3 读取 Excel 文件 2.4 读取 Excel 文件代码演示 1.…

使用Multipass编译OpenHarmony工程

Multipass 是一个轻量级虚拟机管理器&#xff0c;支持 Linux、Windows 与 macOS&#xff0c;这是为希望使用单个命令提供全新 Ubuntu 环境的开发人员而设计的。使用 Linux 上的 KVM、Windows 上的 Hyper-V 和 macOS 上的 HyperKit 来以最小的开销运行 VM&#xff0c;同时它还可…

【网络安全学习】使用Kali做渗透情报收集-02-<指纹识别+目录扫描>

1.指纹识别 指纹识别是指通过一些特征或特定文件来识别目标网站或系统的类型、版本、组件等信息&#xff0c;以便寻找相应的漏洞或攻击方法。 主动指纹识别 通过向目标系统发送正常和异常的请求以及对文件内容的查找&#xff0c;记录响应方式&#xff0c;然后与指纹库进行对比…