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

构造类型数据——结构体

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,一经查实,立即删除!

相关文章

事实空间与价值空间的等价

如何通过理论建模和推导&#xff0c;将事实空间&#xff08;Fact space&#xff09;层间变换或态射 f&#xff0c;等价映射到&#xff0c;价值空间(Value space) 因果态&#xff08;Causal states&#xff09;或隐藏态&#xff08;Hidden states&#xff09;之间的态射&#xf…

结合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.此时可以发现底部没有滚动条了 方法…

Part 4.3 区间动态规划

[NOI1995] 石子合并 题目描述 在一个圆形操场的四周摆放 N N N 堆石子&#xff0c;现要将石子有次序地合并成一堆&#xff0c;规定每次只能选相邻的 2 2 2 堆合并成新的一堆&#xff0c;并将新的一堆的石子数&#xff0c;记为该次合并的得分。 试设计出一个算法,计算出将 …

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循环控制行…

C++ explicit关键字的用法

在C中&#xff0c;explicit关键字用于构造函数和转换运算符&#xff0c;以防止隐式转换。它可以帮助我们避免意外的类型转换&#xff0c;从而提高代码的安全性和可读性。explicit关键字只能用于单参数构造函数和转换运算符。 使用explicit的场景 单参数构造函数&#xff1a; 当…

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…