C++指针作为函数的参数进行传递时需要注意的一些问题
C++ 问题 函数 进行 参数 需要 一些 注意
2023-06-13 09:15:06 时间
只有在被调函数中,对指针进行引用操作,才可以达到不需要返回值,就对指针指向的变量做出相应的变化。
下面分析这样两个例子;
要求:定义并初始化两个字符串变量,并执行输出操作;然后调用函数使这两个变量的值交换,并且要求被调函数的传值通过传递指针来实现。
程序1.1#include<iostream>
#include<string>
usingnamespacestd;
intmain(){
stringstr1="IloveChina!",str2="IloveJiNan!";
voidExchange(string*p1,string*p2);
cout<<"str1:"<<str1<<endl;
cout<<"str2:"<<str2<<endl;
Exchange(&str1,&str2);
cout<<"str1:"<<str1<<endl;
cout<<"str2:"<<str2<<endl;
return0;
}
voidExchange(string*p1,string*p2){
string*p3;
p3=p1;
p1=p2;
p2=p3;
}
输出结果:
#include<iostream>
#include<string>
usingnamespacestd;
intmain(){
stringstr1="IloveChina!",str2="IloveJiNan!";
voidExchange(string*p1,string*p2);
cout<<"str1:"<<str1<<endl;
cout<<"str2:"<<str2<<endl;
Exchange(&str1,&str2);
cout<<"str1:"<<str1<<endl;
cout<<"str2:"<<str2<<endl;
cout<<endl;
return0;
}
voidExchange(string*p1,string*p2){
stringp3;
p3=*p1;
*p1=*p2;
*p2=p3;
}
输出结果:
通过这两个程序的结果对比,程序1.1中的函数没有达到交换数值的目的,而程序1.2达到了;
因为,在主函数中,主函数把str1和str2的首元素的地址,作为实参传递给了函数Exchange函数;Exchange函数中的,p1用于接收str1的地址,p2用于接收str2的地址,这个过程是进行了值传递。
在程序1.1中,只是指针p1和指针p2的值进行了交换,对原来的字符串str1和str2并没有什么影响;而在程序1.2中,是*p1和*p2的值进行了交换,而*p1就是str1它本身,*p2就是str2它本身,所以实际上是str1和str2进行了交换
相关文章
- C++学习——c++逗号操作符说明(附加全部运算符优先级)
- Dev-c++中将头文件和头文件函数分离,编译主函数跳出undefined reference to 的问题解决
- 数字逆序输出 -- C++ 实现
- C++:无法解析的外部符号问题 与 头文件包含注意要点
- 常胜将军问题(C++版)
- C++语法篇之STL库[通俗易懂]
- 菱形继承问题及解决方法—虚继承与虚基类(C++)
- C++与C的区别终于说清楚了!
- 【如何手写strcpy和memcpy】c++面试常问问题总结01
- C++ 栈和典型的迷宫问题
- c++的链表-C++链表
- c++的链表-链表入门(C++)
- 【C++】"undefined reference to" 问题常见的解决方法
- 面试高频问题之C++11新特性
- 基于c/c++的希尔排序与插入排序对比
- C++面向对象程序设计(谭浩强)第三章第五节学习笔记
- c++基础篇之C++ 模板
- C++ unordered_set插入元素(insert插入元素)详解
- C#调用C++版本dll时的类型转换需要注意的问题小结
- c++临时对象的来源
- c++中的消息框messagebox()详细介绍及使用方法
- C++中的操作符重载详细解析
- c++重载的详细总结
- C++中用指向数组的指针作函数参数
- C++操作SQLite简明教程
- C++new、delete(new[]、delete[])操作符重载需要注意的问题
- C++中用栈来判断括号字符串匹配问题的实现方法