首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++string类作为传值,实参与变化

C++问题: 使用函数调用,排序string字符串数组从小到大,没有使用指针和引用,为什么实参也会改变?...string> using namespace std; int main() { void sort(string []); string array[3] = {"l" , "love" , "c+...,也就是说实参对是地址,此时参与实参为同一个地址,在改变形也会改变,所以string类与数组做时一样,string类是一个指针,接受是字符串首个字符地址,其中数组类型在存贮数据是连续线性存贮...,而string类在存贮字符串数组则是存贮每个字符串首字母地址,比如a[3] = {"I","love", "c++"}中a[2]为第一个字符串地址,也就是love种l地址,这样一来string类字符串数组每一个字符串长度没有限制...这是关于C++中string类比C语言中数组类型改进。

1.2K20

C语言和实参区别?

实参是程序中已经分配了内存空间参数,它可以被赋予一个具体值,比如常数、数组、地址(指针),也可以是一个变量名、数组名或表达式,当然也包括指针变量。...则是你在写一个被调函数时,为了说明用到自变量类型、要进行什么操作而定义,在调用函数前它不会被分配内存空间,更不会被赋予具体值。...调用函数时,参会被分配一个新内存空间,实参值就会被“复制”进去,让它在被调函数中参与运算。而实参本身不参与这个运算,它仅仅起到一个传递值作用(不过在C++中可以用&改变实参值)。...如果参数形式是指针,那么“复制”就是地址。...(b)); printf("b = %d\n", b); return 0; } 输出func1 = 6, b = 5,实参b值并没有改变。

1.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

C语言和实参区别?

实参是程序中已经分配了内存空间参数,它可以被赋予一个具体值,比如常数、数组、地址(指针),也可以是一个变量名、数组名或表达式,当然也包括指针变量。...则是你在写一个被调函数时,为了说明用到自变量类型、要进行什么操作而定义,在调用函数前它不会被分配内存空间,更不会被赋予具体值。...调用函数时,参会被分配一个新内存空间,实参值就会被“复制”进去,让它在被调函数中参与运算。而实参本身不参与这个运算,它仅仅起到一个传递值作用(不过在C++中可以用&改变实参值)。...如果参数形式是指针,那么“复制”就是地址。...(b)); printf("b = %d\n", b); return 0; } 输出func1 = 6, b = 5,实参b值并没有改变。

3.6K20

C语言】函数实参与参详解

一、实参            在C语言中,实参(实际参数)是在函数调用时传递给函数值或表达式。它们是函数调用真正参数,用于提供给函数所需数据。...二、   在C语言中,(形式参数)是在函数定义中声明参数,用于接收函数调用时传递实际参数值。用于定义函数输入和输出,可以向函数中传递数据。...函数定义一般形式如下: 返回类型 函数名(列表) { // 函数体 }         其中,列表是由多个组成,每个包括数据类型和参数名之间定义,多个之间使用逗号分隔。...三、 实参和之间关系         在C语言中,和实参是函数定义和函数调用之间关系。 (形式参数)是在函数定义中声明参数,它们用于接收函数调用时传递实际参数值。...需要注意是,实参值被传递给时是通过拷贝方式进行,因此函数内部对修改不会影响到原始实参值。如果希望修改原始实参值,可以通过传递指针或引用方式来实现。

9010

C语言中函数参与实参区别

众所周知一个函数有两种参数,即和实参。那么究竟什么是什么是实参呢? :在定义函数时指定参数,在未出现函数调用时,他们并不占用内存中存储单元。...注意:和实参实际上占用是两份不同存储单元。  和实参之间传递 在c语言中,实参与数据传递是“值传递”,单向传递,只能由实参传给,不能由传递给实参。...值如果发生改变,并不会改变主调函数实参值。...参与实参之间传递分类 1、按值传递(无联系) 按传递就是平常编程中经常用到,定义一个基本数据类型变量,在调用某函数时把该变量作为函数实参传递给函数。...这种传递方式采用是单向值传递,无联系,改变不影响实参。 2、按地址传递(通过操作可能会改变实参) 按地址传递主要出现在函数参数是指针变量、数组等时候。

72220

C语言-指针作为函数类型

前言 C语言函数里最常用就是指针传和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数参数和返回值几乎都是指针类型...c=*a; *a=*b; *b=c; } //return语句只能返回一个值 //如果函数想返回多个值,可以使用指针()实现。...编写一个计算字符串长度函数 函数功能: 传入字符串,返回字符串长度。 与strlen函数功能一样即可。...注意: 从大到小或者小到大排序可以通过函数区分。...='\0'){} return str-p-1; } /* 函数功能: 实现字符串排序.支持从小到大或者大到小 函数: char *p 将要排序字符串 char flag 选择排序方式

1.4K30

参与究竟有什么不同

你所熟知各种编程语言,都有形参与实参这个概念,虽然不同语言对于和实参要求是不同,但他们存在形式与意义却是一致。...对于许多初学者来说,参与实参,着实难以区分和理解,这不怪你,因为计算机里很多概念,的确是难以理解。...,规定了函数样式,是一种形式约定,强类型语言还会约定一个类型。实参,是实际调用时传入函数数据,因此叫实参。...实参与,是两个维度事物,一个强调形式,一个强调实际数值,因此我说,他们是两个维度事物,是静态概念,实参是动态概念,我执行add(3, 5), 函数实参就是3, 5。...在函数内,值,是由实参决定,在函数执行之前,你不知道x 和 y 值是什么,只有函数实际被执行,被调用,在函数内,你才知道实际数值是什么。

1.2K30

C 语言】数组 ( 一维数组退化 | 二维数组退化 | 函数等价关系 )

文章目录 一、一维数组退化 二、二维数组退化 三、数组等价关系 一、一维数组退化 ---- C 中将 一维数组 作为参数 , 传递到函数中 , 该 一维数组 会退化为 指针 ; 将 int...数组时 , 不知道该数组元素个数 , 编译器只能确认 , 该参数是一个 int * 指针类型 ; 这样操作是为了提高 编译器 效率 , 提高程序执行效率 , 函数 最终要拷贝到 栈内存...---- 实参为 一维数组 int array[10] , 等效 为 一级指针 int *array ; 一维数组 , 直接退化为 指向 数组元素指针 , 数组元素是 普通类型 , 指向普通类型指针...也是 指针 , 则为 二级指针 ; 实参为 二维数组 int array[10][20] , 等效 为 一级指针 int (*array)[20] ; 二维数组 数组元素 是 一维数组...; 外围数组 ( 第二维 ) 退化为 指针 , 指针 指向元素 是 一维数组 , 则为 指向 一维数组 指针 , 每个一维数组有 20 个元素 ;

2.7K10

c语言函数指针用法_函数指针作为

文章目录 导引 指针函数 指针函数定义 指针函数三种写法 代码示例 函数指针 定义 代码示例 函数指针和指针函数区别 定义不同 写法不同 用法不同 导引 函数指针和指针函数,在学习 C 语言时候遇到这两个东西简直头疼...,当然还有更头疼,比如什么函数指针函数、指针函数指针、数组指针、指针数组、函数指针数组等等,描述越长其定义就越复杂,当然理解起来就越难,特别是刚开始学习这门语言童鞋,估计碰到这些东西就已经要崩溃了,...今天这里只讲两个相对简单,其实上面说那些太复杂东西也真的很少用,即便是用了理解起来很麻烦,所以莫不如先深刻理解这两个比较容易,并且项目中比较常用到。 我们先来看看两者定义以及说明。...指针函数 指针函数定义 指针函数,简单来说,就是一个返回指针函数,其本质是一个函数,而该函数返回值是一个指针。...函数指针和指针函数区别 通过以上介绍,应该都能清楚理解其二者定义。那么简单总结下二者区别: 定义不同 指针函数本质是一个函数,其返回值为指针。 函数指针本质是一个指针,其指向一个函数。

57820

请教关于C语言和实参存储单元问题?

首先我们限定一下问题,只限于cdecl调用约定,函数没有被编译器做inline优化(C++才有inline,但是C编译器也可能自己把函数调用优化掉)。...除了cdecl以外,C中其他常用调用约定包括stdcall和fastcall,C++中还有一个thiscall(用于调用类成员函数)。fastcall会使用寄存器来传递一部分参数。...从这个角度来说,所有的实参都必须要占用独立空间。而且C语言也不支持传递引用作为参数。...纠结在于传递数组作为参数这种情况,对编译器来说,实际上参数是个指针,但是从代码形式上来看好像是个数组……这个我也不知道该怎么算,这简直是个哲学问题。...这个时候显然不是“实参和各占用独立存储单元”。

1.2K30

C语言函数参数详解】——实际参数(实参)&形式参数(

: 我们如果在函数外部使用函数,这是不可行。...2.在函数调用过程中才实例化(分配内存单元) 函数调用之前,还未创建 函数调用过程中,才被实例化 函数调用结束,生命周期结束,被销毁 三.参与实参关系 了解了什么是函数和实参,...他们关系是: 实例化之后其实相当于实参一份临时拷贝。 这里我们对函数实参和进行分析: 我们来尝试写一个函数交换两个整形变量内容。...这是因为在函数调用时,x,y是实参num1,num2一份临时拷贝,和实参并没有建立真正意义上联系,x,y是两个独立变量,和实参num1,num2分别占用不同内存空间,在这里,和实参只是数值相同罢了...总之,我们最后得到结论就是,函数实参与关系就是: 实例化之后其实相当于实参一份临时拷贝。

85010

【Java探索之旅】方法概念 定义 执行流程 实参与交互

一、方法概念及定义 1.1 方法概念 方法就是一个代码片段. 类似于 C 语言 “函数”。方法存在意义(不要背, 重在体会) 是能够模块化组织代码(当代码规模比较复杂时候)....在Java中,实参值永远都是拷贝到中,和实参本质是两个实体。...相当于是只是实参一份临时拷贝,并且对值进行修改并不会影响实参。...,x和y空间在swap方法运行时栈中,因此:实参a和b 与 x和y是两个没有任何关联性变量,在swap方法调用时,只是将实参a和b中值拷贝了一份传递给了x和y,因此对x和y操作不会对实参...注意:对于基础类型来说, 相当于实参拷贝. 即 传值调用 四、没有返回值方法 方法返回值是可选.

7910

C 语言】字符串模型 ( 字符串翻转模型 | 抽象成业务函数 | 返回值 | 函数返回值 | 函数处理 | 指针判空 )

文章目录 一、字符串翻转模型 业务函数 二、完整代码示例 一、字符串翻转模型 业务函数 ---- 将上一篇博客 【C 语言】字符串模型 ( 字符串翻转模型 ) 代码 , 主要业务逻辑 , 抽象成函数...; 字符串翻转模型 业务函数 要点 : 返回值 : 函数返回值 , 一般使用 函数 间接赋值 进行返回 ; 下面的代码中 char *str 是返回值 ; int inverse(char *...str) 函数返回值 : 函数返回值 , 反映是函数执行结果状态 , 返回 0 执行成功 , 返回 -1 执行失败 ; 函数处理 : 在 函数中 , 如果涉及到修改 指针变量 , 一般不直接使用..., 创建一个临时局部变量 , 接收 , 然后再执行相关操作 ; // 创建临时变量接收 函数 , 不要直接改变形函数指向 char *str_tmp = str; 指针判空...: 函数第一项任务就是 判定 指针是否合法 , 如果任何一个指针为空 , 直接返回 -1 ; // 判断传入字符串指针是否为空 if(str_tmp == NULL)

89810

C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 指针间接赋值 | 返回值状态 | 指针处理 | 指针判空 | 返回值 )

, 进行 翻转 ; 一、业务子函数接口定义要点 ---- 在上一篇博客 【C 语言】字符串模型 ( strstr-while 模型 ) 基础上 , 将相关功能封装成 API 函数 , 将 主函数...与 子业务 函数分离开 ; 自定义函数接口 ; 分离 自定义 业务子函数 与 主函数 main() ; 定义接口如下 : 要点 1 指针间接赋值 : 主要是获取子串大小 , 通过 int...: 指针处理 : 定义 局部 临时 指针变量 , 接收 函数参变量 , 尽量不修改 函数 值 ; 指针判空 : 凡是传入指针 , 一律判定指针是否合法 ; 返回值处理 : 返回值不要直接修改..., 先定义临时局部变量保存返回值 , 最后执行完毕 , 再将返回值 通过 间接赋值 赋值给 返回值指针 指向 内存地址 ; /* * 获取字符串中子串个数接口 * char *main_str...int get_sub_count(char *main_str, char *sub_str, int *sub_count) { // 为了不修改 函数 值 , 使用指针变量接收

3.1K10

C 语言中关于通过传递数组长度计算一些思考

本文链接:https://blog.csdn.net/solaraceboy/article/details/103187291 C 语言中关于通过传递数组长度计算一些思考 一 背景 学习 C...语言过程中,计算数组长度经常会碰到。...在字符型数组中我们可以使用 strlen() 来获取当前数组长度,对于其他类型数组,这个方法就不适用了。由于经常会遇到计算数组长度问题,经过思考,考虑通过一个函数来实现数组长度计算。...思路是这样:通过参将数组传递给长度计算函数,长度计算函数计算完成之后返回数组长度。但是在实际实践过程中遇到了问题,请继续往下看!...length; } 执行结果: The length of this array is: 2 The length of this array is: 5 三 结果分析及总结 3.1 第一个结果,通过传递给数组长度计算函数来计算数组长度

98920

C语言(打包,压!)

有个GNU关键字,出现在了几天前文章《算法(BMP图像格式处理)》中,当时提了一下,蛋感觉没有敲黑板划重点,很多小朋友估计没咋注意,这就好比衣角两块钱,平时不起眼,不在意,不爱她,万一外出没车没人没带包...关键字,那么系统将会根据CPU字长将结构体内部各个成员地址对齐,地址对齐结果会导致有些成员变量后面需要填补一些0,也就是说:结构体总大小,可能会大于每一个成员大小之和。...这个过程就好比顺丰快递员打包包裹,当你寄送东东无法刚刚好填满整个箱子时候,他为了防止运送过程中震荡损坏物件,会塞一些泡沫、空气囊等填充物进去一样。...这个填充一些东西做法,一般情况下都是好,在移植类代码中甚至是必须。但是如果你想要让结构体大小严格等于每个成员之和,就不能这么做了,而必须加上 __attribute__((packed))。...就像读取BMP文件格式头例子,如果没使用这个关键字,你将会读到比所实际所需更多字节,结果当然就不对了。 关键是以上错误非常隐蔽,如果老师傅不说破,小学徒是不是要跑断腿?

69520
领券