*****结构体的嵌套使用 结构体成员作为函数的参数(三种方法和使用最多的地址传递)

向函数传递结构体的方式有三种:

1、向函数传递结构体的单个成员:结构体的单个成员作为函数参数,相当于变量在函数之间的传递,仅仅复制单个成员的内容。(很少使用)。

2、用结构体变量作为函数参数,向函数传递结构的完整结构:实际是复制所有结构体成员给函数。调用函数的结果不影响主调函数的结构体成员的值。传递后的值不能改变结构体原始值。

        用结构体变量作实参时,采取的是“值传递”方式,将结构体变量所占的内存单元的内容(结构体变量成员列表)全部顺序传递给形参,这里形参也得是结构体变量。

C语言允许对具有相同类型的结构体变量进行整体赋值,在赋值的时候是按照成员变量逐一的进行赋值。

#include <stdio.h>

typedef struct max   //定义一个标签为max的结构体
{
	int x;
	int y;
	int z;
}max;


int func(max s)   //最大值函数,三目运算符,形参为max类型的s
{
	s.z = s.x > s.y ? s.x:s.y;
	return s.z;
}

int main()
{
	max s = {0, 0 ,0};  //给结构体变量s赋值
	s.x= 1;              //修改结构体变量s中的成员x变量的值
	
	printf("%d = %d > %d ? %d : %d ",func(s),s.x,s.y,s.x,s.y);
	
	//输出结果 1 = 1 > 0 ? 1:0
}

 

3、向函数传递结构体变量的首地址:用结构体指针或结构体数组作为函数参数向函数传值,仅仅复制一个地址值。传递后的值可以改变结构体原始值。

当然这里的a -> y = 13;等价于(*a).y =13; 

 

 很多人分为这三种,但其实还有一种,就是用结构体变量的引用变量作函数参数,(很少提到,但最好用)

这种传递方式:实参是结构体变量,形参是对应的结构体变量的引用,传递的是地址,因而执行效率与指针差不多一样高。而且更加直观明了,使程序更加简单易懂。

被调函数参数写为接收地址的形参

#include <stdio.h>


typedef struct max
{
	int x;
	int y;
	int z;
}max;


int func(max &a)	//看这里,接收结构体变量的地址即可,使用起来和原函数很像
{
	a.z = 14;	
}

int main()
{
	max s = {0, 0 ,0};
	printf("%d %d %d\n",s.x,s.y,s.z);
	
	func(s);                 //直接传递结构体变量
	printf("%d %d %d",s.x,s.y,s.z);
	
}

因为嵌套使用和前面的结构体成员的访问有关,所以放在了最后: 

#include <stdio.h>
#include <string.h>

//日程管理 

typedef struct date  //定义了一个日期结构体,包含年月日三个成员 
{
	int year;
	int mouth;
	int day;
}datea;

typedef struct  schedule//定义了一个日程结构体,包含日期,和活动两个成员变量 
{
	datea date;
	char activity[200];
}sch;



int main()
{
	sch jack;                   //jack的日程
	jack.date.year = 2021;      //使用级联运算 
	jack.date.mouth = 11;
	jack.date.day = 11;
	strcpy(jack.activity,"Taobao shooping");  //字符串的赋值要使用strcpy
	
	printf("%d %d %d \n%s \n",jack.date.year,jack.date.mouth,jack.date.day,jack.activity);
	
	
	
}

输出结果: 

 函数调用的情况:

#include <stdio.h>
#include <string.h>

typedef struct date  //定义了一个日期结构体,包含年月日三个成员 
{
	int year;
	int mouth;
	int day;
}datea;

typedef struct  schedule//定义了一个日程结构体,包含日期,和活动两个成员变量 
{
	datea date;
	char activity[200];
}sch;

int Init(sch &jack)  //初始化函数 
{
	jack.date.year = 2021; //使用级联运算 
	jack.date.mouth = 11;
	jack.date.day = 11;
	strcpy(jack.activity,"Taobao shooping");
 } 


int main()
{
	sch jack;
	
	Init(jack);
	
	printf("%d %d %d \n%s \n",jack.date.year,jack.date.mouth,jack.date.day,jack.activity);
	
	
	
}

 

 那么最后我们把数组和函数调用结合起来,写一个2个人的日程管理情况,(这里用到结构体数组做函数参数的传递,结构体数组的赋值和访问,结构体嵌套的使用)

#include <stdio.h>
#include <string.h>

typedef struct date  //定义了一个日期结构体,包含年月日三个成员 
{
	int year;
	int mouth;
	int day;
}datea;

typedef struct  schedule//定义了一个日程结构体,包含日期,和活动两个成员变量 
{
	char name[10];
	datea date;
	char activity[200];
}sch;

int Init(sch *name)  //初始化函数 数组用指针接收 
{
	strcpy(name[0].name,"jack");
	name[0].date.year = 2021; //使用级联运算 
	name[0].date.mouth = 11;
	name[0].date.day = 11;
	strcpy(name[0].activity,"Taobao shooping");
	

	
	strcpy(name[1].name,"Amy");
	name[1].date.year=2021;
	name[1].date.mouth = 11;
	name[1].date.day = 12;
	strcpy(name[1].activity,"play piano");
 } 


int main()
{
	sch name[2];
	for(int i=0;i<2;i++)
	{
		Init(name);
	
		printf("%s %d %d %d \n%s \n",name[i].name,name[i].date.year,name[i].date.mouth,name[i].date.day,name[i].activity);		
	}
	
}

输出结果:        

 

 

如果你看到这里,给个赞吧,很认真编辑了的。

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
模块基础信息: 有38个子程序 有8个数据类型 有6个类 { Heap(堆处理)//11个类方法Local(局部内存操作)//9个类方法进程//11个类方法内存操作API(内存操作)//10个类方法Global(全局内存操作)//11个类方法Virtual(虚拟内存操作)//7个类方法} 有58个DLL命令 有48个常量 更新信息: @3.11更新:{加入未公开常量 2 个加入【内存操作】类DLL<IsBadCodePtrGetCurrentThreadGetCurrentThreadId> 未公开DLL 2 个 共未公开DLL 2 个加入汇编函数<R>未公开汇编函数 5 个 共未公开汇编函数 5 个}并且对一部分命令和注释进行了调整!!! 本次对例程也进行了更新~ 至于DLL和主程序之间的传递可以看我的作品:Relative-RZJ 通用IDE V2.2.78.3中的代码 主程序中: DLL中: 等等......那么使用本模块可以有哪些作用? 你有想过把自定义的数据结构变量保存到硬盘吗? 你有想过给DLL传自定义的数据结构变量吗? 你想跳出现有的变量限定吗? 你想为所欲为吗? ......Emmm搞错了,不能为所欲为...... 你想跳出限定吗? 你想强制进行任意类型数据转换吗? 也许它能满足你的愿望! R_取通用数据类型() !!注:经测试该函数不是很准确 有可能会误判 仅供参考 请慎用自定义类型 或 函数指针 这两种判定得比较准确 因为内存中的特征较多 文本型可能会被误判为数组或数值 传来参数如果实际为的数值类型 但其如果恰表示一个指针 则也容易被误判为其他类型 Global.取结构体尺寸()注意结构中不能嵌套再其他结构或含有数组,同时不能含有字节型、短整数型、字节集型的成员,否则会出问题;并且也都不能直接传字节集。因为E中自定义数据类型嵌套结构或数组使用的是指针,发布到坛论易精与C/C++中直接为数据体不同;并且E的自定义数据类型里小于4字节的成员会被扩展为4字节,以实现对齐如果结构像平时那样直接声明为结构时,E会自动把结构转换为C/C++中的标准的那种,但结构写为通用型时E只简单传递结构指针不做转换R_指针到数据_变量()【本质是将源数据的值写入目标变量,源数据不是基本类型的时候就是传指针了(注意如果源数据与目标变量类型不能兼容的话,程序就会崩溃)[还可实现父类到子类向下转型等]】
“新概念C语言”突破了以往任何一种语言教材的旧的模式,将教学内容分为入门篇和提高篇两个篇章。在入门篇中只引进程序设计必要的语法现象,达到快速入门。激发兴趣的目的。在入门篇和提高篇之间插一个强化上机实验周,巩固学习内容。在提高篇中完成完整的语法、算法、程序设计思想等教学目的的学习任务。由于学生对语言已具有了初步的了解并掌握了最基本的语法和程序设计思想,能设计较简单的程序,所以在提高篇的学习中,不论对灵活语法的学习和掌握,还是对程序设计思想的掌握都更加容易,从而可以较容易达到教学目标。 第一部分 入门篇 1 第1章 C语言的产生及其工作流程 3 1.1 C语言的产生 3 1.2 程序和程序设计 3 1.2.1 C程序 3 1.2.2 程序设计 4 习题 4 第2章 C程序设计的初步知识 5 2.1 简单C程序的构成和格式 5 2.2 常量、变量和标识符 6 2.2.1 标识符 6 2.2.2 常量 7 2.2.3 用定义一个符号名的方法来代表一个常量 7 2.2.4 变量 8 2.3 整型数据 8 2.3.1 整型常量 8 2.3.2 整型变量 8 2.4 实型数据 9 2.4.1 实型常量 9 2.4.2 实型变量 9 2.5 字符型数据 10 2.5.1 字符常量 10 2.5.2 字符串常量 11 2.5.3 字符变量 11 2.6 算术表达式 11 2.6.1 基本的算术运算符 11 2.6.2 运算符的优先级、结合性和算术表达式 12 2.6.3 强制类型转换表达式 13 2.7 赋值表达式 13 2.7.1 赋值运算符和赋值表达式 13 2.7.2 赋值运算中的类型转换 14 习题 15 第3章 顺序结构程序 16 3.1 复合语句和空语句 16 3.1.1 复合语句 16 3.1.2 空语句 16 3.2 程序举例 16 习题 17 第4章 选择结构 19 4.1 关系运算和逻辑运算 19 4.1.1 C语言中的逻辑值 19 4.1.2 关系运算符和关系表达式 19 4.1.3 逻辑运算符和逻辑表达式 20 4.2 if语句和用if语句构成的选择结构 21 习题 22 第5章 循环结构 25 5.1 for语句和用for语句构成的循环结构 25 5.1.1 for语句构成的循环结构 25 5.1.2 for循环的执行过程 25 5.1.3 有关for语句的说明 25 5.2 循环结构的嵌套 27 习题 28 第6章 函数 30 6.1 函数的定义和返回值 30 6.1.1 函数定义的语法 30 6.1.2 函数的返回值 30 6.2 函数的调用 32 6.2.1 函数的调用方式 32 6.2.2 函数调用时的语法要求 32 6.3 函数的说明 33 6.3.1 函数说明的形式 33 6.3.2 函数说明的位置 34 6.4 调用函数和被调用函数之间的数据传递 34 6.5 库函数 36 6.6 数据输入输出及常用库函数 37 6.6.1 printf函数(格式输出函数) 37 6.6.2 scanf函数(格式输入函数) 39 6.6.3 调用putchar和getchar函数输出和输入字符 40 6.7 程序举例 41 习题 43 第7章 数组 45 7.1 一维数组的定义和一维数组元素的引用 45 7.1.1 一维数组的定义 45 7.1.2 一维数组元素的引用 46 7.1.3 一维数组的初始化 46 7.1.4 一维数组的定义和数组元素引用举例 47 7.2 函数之间对一维数组和数组元素的引用 47 7.2.1 数组元素做实参 47 7.2.2 数组名做实参 49 7.3 一维数组应用举例 50 7.4 字符数组 53 7.4.1 字符数组的定义 53 7.4.2 字符数组的初始化 54 7.4.3 字符数组的引用 54 7.4.4 字符串与字符串结束标志 55 7.4.5 字符数组的输入输出 56 7.4.6 字符串处理函数 58 7.4.7 字符数组应用举例 60 习题 61 第8章 文件 63 8.1 C语言文件的概念 63 8.2 打开文件 64 8.3 关闭文件 65 8.4 调用getc(fgetc)和putc(fputc)等常用函数进行输入和输出 65 8.5 判断文件结束函数feof 68 习题 69 第二部分 提高篇 71 第9章 算法 73 9.1 算法 73 9.2 结构化程序设计和模块化结构 74 9.2.1 结
这上传的资源中包含一套我工作中常用的模板库,及不需要MFC支持的excel操作接口,导出函数调用栈(dump stack)接口,可以直接用VS2008运行TestCodeLib.sln来根据unit test来了解用法。 ⑴ 需求(requirements) 重量级的BOOST非常强大,但有时候项目中没有引入它,这时候我们需要自己的模板库。 BOOST is very powerful, but some projects have not include BOOST library. So we need out own template type trait library -- it is the responsibility of this lightweight library. 即使BOOST非常强大,但有些常用的功能其也没有,而经常性的代码中又需要这些功能。比如把运行期数据转换为元程序需要的编译期数据。 Even if BOOST is very powerful,it can't still meet all requirements. e.g. convert runtime data into compile period data needed by metaprogramming. /*************************************************************************************************************************************/ ⑵ 益处(advantage) 此泛型库抽象了一些常用的业务需求,可以避免大量的重复工作。 它是完全泛型的并且是类型安全的(没有强制类型转换),如果使用错误将导致编译失败,从而提高了正确率(正确性由编译器保证)。 这个库的很多模板类型推导不需要C++11的支持,这是一个大的优势(VS2010才开始支持C++11)。 this general library draws out some common business and avoid unnecessary repeat work. it is completed general and type-safe(without any type cast), mistake(s) will cause compile failure, so it improves correctness. In this library , type deduce need't C++11's support, it is big advantage. (VS2010 begin to support C++11) /*************************************************************************************************************************************/ ⑶ 用法(usage) 下载这个库后,使用VS打开.\CodeLib\testcase\TestCodeLib\TestCodeLib.sln,直接按F5启动,即可以看到许多单元测试的用法/测试用例的输出。 如果需要使用某功能,可以参考其对应的测试代码的用法。(每个功能文件.\CodeLib\include\MiniMPL\xxx.hpp,都对应一个测试文件.\CodeLib\testcase\MiniMPL\test_xxx.hpp) (这个库的使用及修改是完全自由的,只需要保留文件头中的注释即可) usage: download this library, open .\CodeLib\testcase\TestCodeLib\TestCodeLib.sln with VS,you can see many usage/test output of unit test. every feature has according unit test file, it shows its usage. e.g. .\CodeLib\include\MiniMPL\xxx.hpp has according ".\CodeLib\testcase\MiniMPL\test_xxx.hpp" this library is all free, the only requirement is that you need to keep the comments in header file. /*********************************************************************************************************************************************************/ ⑷ 本库提供的主要功能介绍: major feature in this lib: ◆ [typeTraits.hpp] ★ 测试类型的基本属性,比如IsConst/IsVoliate/IsRef/isAtomType/isBuildInType/isEnumType/IsIterator/IsPointer/isString/isInnerFloat/isArray/IsBaseDerive/.... ★ 转换类型的基本属性,比如AddConst/AddVoliate/AddRef/AddPointer,..,RemoveConst/RemoveVoliate/RemoveRef/RemovePointer,... 这类功能是元程序库的基本支持组件,其它库(比如boost)也提供了,但本库时提供的检测属性更多。 ☆ detect type property. e.g.IsConst/IsVoliate/IsRef/isAtomType/isBuildInType/isEnumType/IsIterator/IsPointer/isString/isInnerFloat/isArray/IsBaseDerive/.... ☆ convert type basic qualifier,e.g. AddConst/AddVoliate/AddRef/AddPointer,..,RemoveConst/RemoveVoliate/RemoveRef/RemovePointer,... get type traits.e.g.const/voliate/ref/isAtomType/isBuildInType/isEnumType/isString/isInnerFloat/isArray/IsBaseDerive/.... It is base support component of metaprogramming system,it is similiar with BOOST , but this lib provide more. ◆ [typeConvert.hpp] ★ 实现类型的修饰符转换。比如让输出参数类型的修饰符(const/voliate/ref/*)和输入参数类型的修饰符一样。 SameConst/SameVoliate/SameRef/SamePointer/SameAllQualifier/RefAdapter 应用场景:存取结构体的某类成员,当输入参数有某种const/voliate/ref修饰符时,通常要求返回值也有类似的修饰符。 ★ 当把"智能指针/stl迭代器/C指针/前三者嵌套"都视为指针时,其内的最终值(非指针值)是一致的,在模板函数中,某些场景需要取得其最终的非指针值。 应用场景:转发模板函数,如 template<typename T> void transmit(T p) { receive(p); } //void receive(int&); 如果transmit的传入实参p为指针类型(比如smartpointer<vector<int*>::iterator>*或者vector<int*>::iterator), 但是转发的接收函数receive的形参为非指针类型(比如int&),理论上是可以实现转换的。 Get::finalValue接口提供了这种自动的转: template<typename T> void transmit(T p) { receive(Get::finalValue(p)); } ☆ Convert type qualifiers,e.g. addConst/removeConst.. , keep same output qualifier (const/voliate/ref/*) with input type. apply scenario: get member of one structure object. ☆ Think "stlSmartptr<T>/StlContainer<T>::iterator/T*" as pointer, their inner non-pointer value is same. in some scenario, the final non-pointer value is needed. e.g. template<typename T> void transmit(T p) { receive(p); } //void receive(int&); if real paremeter "p" is smartpointer<vector<int*>::iterator>* or vector<int*>::iterator , but needed parameter by "receive" is int&, in theory it is OK. Get::finalValue provide this conversion: template<typename T> void transmit(T p) { receive(Get::finalValue(p)); } ◆ [traverseTypeSet.hpp] ★ C++语法不支持模板函数/模板成员函数作为回调函数。本库采用了封装,可以支持模板函数的回调,并且支持最多7个可变参数(可以简易扩充参数个数)。 可以遍历一个TypeList或者枚举值范围CEnumRange,然后以满足条件的类型回调用户的模板函数。 其广泛的应用场景即是把运行期数据以一种非hard-code的方式转化为编译期数据,从而满足元程序对编译期数据的需求。 ☆ C++ doesn't support template-based callback function. this lib package support template-based callback function(MAX 7 various parameters,easy to expand). It can traverse one TypeList or enum value , then call user's template function by suitable type/enum value. This feature converts runtime data into compile data to meet metaprogramming requirement without hard-code way, it is one big advantage. ◆ [functionTraits.hpp] ★ 获取任意类型函数的各种特征,比如函数的所有参数Params_T,返回值类型Return_T,对象类型Object_T(如果是成员函数),第N个参数的类型GetFunctionParam<F,N>, 这些类型都是包含修饰符(const/voliate/ref)的完整类型。 这些组件对于操作函数非常重要。 ☆ get some traits of any function, include all parameter type "Params_T",return type "Return_T", host type "Object_T"(if member-function) , No.x parameter type "GetFunctionParam<F,x>". this type include all signature qualifiers. This component is very important for metaprogramming based on function. ◆ 有时候STL的算法并不好用,经常是为了第三个参数需要自己写一个专用的琐碎的小函数。 虽然可以用std的bind或者boost的lambda,但是对于某些嵌套情况,用起来非常麻烦,这个库提供了下面的一些解决方式: sometimes STL algorithm is not good and it needs one traival function object(third parameter) , althrough std::bind/boost::lambda is available, but for some nest case, it is very hard to be used.this library provide below features: [function.hpp] ★ 把既有的多元函数转换为一元函数对象UnaryFunction。它通常应用于泛型(比较/排序/遍历)算法的第三个参数。 ☆ convert existing multi-parameters into unary function, it is general used as 3rd parameter in general algorithm. e.g. stl::for_each [functionobject.hpp] ★ 把一些常用目的的函数封装成函数对象,比如"比较器/测试器" ☆ function object with special abstract targart. e.g. "comparer/Tester" ◆ [functionCreater.hpp] ★ 把多元函数封装为一元函数的帮助函数。(一元函数对象的类型通常不易于书写) ☆ helper function to pack multi-parameters into unary function.(it is hard to write unary function object type) ◆ [paramPackage.hpp] ★ 实现了把任意多个(最多7个,可简易扩充),任意类型的参数封装成一个参数以利于数据传递。 ☆ pack any number parameter (max 7,easy expand) into one parameter . it is easy to transfer. ◆ [classregister.hpp] ★ MFC的动态创建不是泛型的,创造出来的对象必须是CObject的派生类,而且支持的创造方式单一,不够灵活有时候甚至不能满足需求。 本库里提供了一个泛型的动态创建方式,可以以多种灵活的方式甚至用户自定义的方式来匿名动态创建对象,创建的对象基类可以由用户指定(必须存在派生关系)。 ☆ like MFC's DYNAMIC_CREATE, but the one of MFC is not general,the instance MUST be drived from class CObject, MFC dynamic creation has only one create way,sometimes it is not enough。 this library provides general dynamic create way, can create object by multiple ways , even customized way.and base class can be specified by user. ◆ [callbackWorker.hpp] ★ 最易于使用的回调函数是无参数的回调函数。 此功能可以把任意多个参数的多元(成员/非成员)函数封装成一个无参数函数,作为简单的回调函数。 ☆ best callback function is non-parameter function. This feature packs multiple-parameter function into one no-parameter function, it is easy to be used as callback function. ◆ [memberPtr.hpp] ★ 以统一的方式实现了任意级数的结构体成员的存和取,比如多级结构体嵌套。例子:a.m_b.m_c.m_d.....m_x,非常易于在模板设计中使用。 ☆ access any level member of structure object by one unified way. e.g:a.m_b.m_c.m_d.....m_x,it is easy to be used in template componment. ◆ [anyObject.hpp] ★ 任意对象类(CAnyObject)。提供模板化的指针操作符,如果不支持用户指定指针类型,则转换结果为NULL,从而保证正确性。 ☆ package any object(CAnyObject), it operator function is template-based. if it doesn't support conversion, it return NULL. ◆ [dataset.hpp] ★ 把STL容器和经典数组封装成统一的形式,在使用上不再区别对待。对于C数组,将会自动检测越界情况。 ★ 可以使用初始化列表对数组,STL容器进行(反复)初始化。例如:vector<int> a={1,2,3,45,2}; ☆ pack STL container and class array into unified object with several same interfaces. ☆ can initialize array/stl container with initalization list repeated. e.g. vector<int> a={1,2,3,45,2}; ◆ [macroLoop.hpp] ★ 当多条语句的差别仅仅是一个数字时,可以利用提供的循环宏简化成一条宏语句,从而简化书写。用法可参见对应的单元测试例子。 ☆ if only one number is different in multiple statements, can use one macro loop to simplify them (one macro statement) usage refer to unit test. ◆ [mathOperator.hpp] ★ 泛型的数学操作符。"equal/lesser/NotBinary/NotUnary/notEqual/lesserEqual/greater/greaterEqual及交换函数swap/swapif" ☆ general math operator. "equal/lesser/NotBinary/NotUnary/notEqual/lesserEqual/greater/greaterEqual and swap/swapif" /*************************************************************************************************************************************/ ⑸ 感谢及借鉴: 本库中的占位符[placeHolder.hpp]借鉴于boost库,感谢boost库的大师们的灵感。 typelist来自loki库,但是把命名空间Loki改为MiniMPL以避免频繁的命名域切入/切出,感谢Andrei Alexandrescu的精彩演绎与启发. thanks and borrow: Args [placeHolder.h] comes from BOOST::MPL. thanks for BOOST team. typelist comes from loki lib with tiny modification(rename namespace loki to MiniMPL to avoid field switch frequently).thanks for Andrei Alexandrescu
当我们需要在函数中操作结构体类型的数据时,可以将结构体类型作为函数的形参,这样在函数内部就可以对结构体类型数据进行操作。 如果结构体嵌套了其他结构体,我们可以将嵌套结构体类型作为结构体类型的成员之一,并在函数参数传递结构体类型。 例如,定义一个名为 `Student` 的结构体类型,其中嵌套了一个名为 `Birthday` 的结构体类型,代码如下: ```c #include <stdio.h> struct Birthday { int year; int month; int day; }; struct Student { char name[20]; int age; struct Birthday birthday; }; void printStudent(struct Student stu) { printf("Name: %s\n", stu.name); printf("Age: %d\n", stu.age); printf("Birthday: %d-%02d-%02d\n", stu.birthday.year, stu.birthday.month, stu.birthday.day); } int main() { struct Student stu = {"Tom", 18, {2000, 1, 1}}; printStudent(stu); return 0; } ``` 在上面的示例中,我们定义了一个名为 `Birthday` 的结构体类型和一个名为 `Student` 的结构体类型,`Student` 结构体嵌套了 `Birthday` 结构体类型。在 `printStudent` 函数中,我们将 `Student` 结构体类型作为参数传递,可以直接通过 `stu.birthday` 访问嵌套的 `Birthday` 结构体类型的成员变量。 当然,我们也可以将 `Student` 结构体类型的指针作为函数参数,代码如下: ```c void printStudent(struct Student *pStu) { printf("Name: %s\n", pStu->name); printf("Age: %d\n", pStu->age); printf("Birthday: %d-%02d-%02d\n", pStu->birthday.year, pStu->birthday.month, pStu->birthday.day); } int main() { struct Student stu = {"Tom", 18, {2000, 1, 1}}; printStudent(&stu); return 0; } ``` 注意,在函数中访问结构体类型的成员变量时,可以使用 `.` 运算符或 `->` 运算符,前者用于结构体类型变量,后者用于结构体类型指针。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程图一乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值