内置类型和结构体类型作为函数参数传递时的共同点

2024-01-23 08:38

本文主要是介绍内置类型和结构体类型作为函数参数传递时的共同点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

结构体类型不同于数组,而结构体类型与内置类型有很多相同之处。数组名代表数组的第一个元素的地址,而结构体名代表的却不是地址而是第一个元素的值。在作为函数参数时,和内置类型一样,可以通过值(结构体名)、引用、指针几种方式传递。而且其传递特点与内置类型一致,例子:

#include <iostream>
using namespace std;
typedef struct Change
{
int m;
int n;
}StrChange;
void Change(int a1);
void YChange(int &b1);
void PChange(int *c1);
void Change1(StrChange ChangeL1 );
void YChange1(StrChange &ChangeM1);
void PChange1(StrChange *ChangeN1);
void main()
{
int a = 1;
int b = 2;
int c = 3;
StrChange ChangeL;
StrChange ChangeM;
StrChange ChangeN;
ChangeL.m = 4;
ChangeL.n = 5;
ChangeM.m =6;
ChangeM.n = 7;
ChangeN.m = 8;
ChangeN.n = 9;
Change(a);     //传值,无法改变
YChange(b);     //引用,可以改变
PChange(&c);    //指针(地址),可以改变
Change1(ChangeL);	//值,无法改变。和基本类型一样,不能通过传值改变,这里不同于数组!
YChange1(ChangeM);	//引用,可以改变
PChange1(&ChangeN);	//指针(地址),可以改变
cout<<"The a is :  "<<a<<endl;
cout<<"The b is :  "<<b<<endl;
cout<<"The c is :  "<<c<<endl;
cout<<"The m in struct L is :  "<<ChangeL.m<<endl;
cout<<"The n in struct L is :  "<<ChangeL.n<<endl;
cout<<"The m in struct M is :  "<<ChangeM.m<<endl;
cout<<"The n in struct M is :  "<<ChangeM.n<<endl;
cout<<"The m in struct N is :  "<<ChangeN.m<<endl;
cout<<"The n in struct N is :  "<<ChangeN.n<<endl;
}
void Change(int a1)
{
a1 = 11;
}
void YChange(int &b1)
{
b1 = 22;
}
void PChange(int *c1)
{
*c1 = 33;
}
void Change1(StrChange ChangeL1 )
{
ChangeL1.m = 44;
ChangeL1.n = 55;
}
void YChange1(StrChange &ChangeM1)
{
ChangeM1.m = 66;
ChangeM1.n =77;
}
void PChange1(StrChange *ChangeN1)
{
ChangeN1->m = 88;
(*ChangeN1).n = 99;
}
 

注意:以结构体名作为参数传递时,同内置类型一样不能对实参做修改。而通过引用和指针则可以修改实参。一定要注意实参与形参的对应关系:

结构体类型与内置类型的比较
 实参形参
内置类型(传值)ab
内置类型(引用)a&b
内置类型(指针)&a*b
结构体类型(传值)

a(数组名)

a(数组名)
结构体类型(引用)a&b
结构体类型(指针)&a*b

另外,C++不支持直接输出结构体名,而用C可以直接输出结构体名,得到的是第一个元素的地址。

这篇关于内置类型和结构体类型作为函数参数传递时的共同点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/635839

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

Mysql BLOB类型介绍

BLOB类型的字段用于存储二进制数据 在MySQL中,BLOB类型,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储的大小不同。 TinyBlob 最大 255 Blob 最大 65K MediumBlob 最大 16M LongBlob 最大 4G