C++传址操作
时间: 2025-03-22 08:01:03 AIGC 浏览: 22
### C++ 中 Pass By Reference 的用法
在 C++ 编程语言中,默认情况下参数传递方式是按值传递(pass by value)。这意味着函数接收的是实际参数的一个副本,因此对形参所做的任何修改都不会影响到原始变量[^1]。然而,在某些场景下可能希望直接操作原始数据而不是其拷贝,这时可以采用按引用传递(pass by reference)的方式。
#### 使用引用作为函数参数
通过声明函数接受引用类型的参数来实现隐式的按引用传递:
```cpp
void modifyValue(int& refParam) {
refParam += 10; // 修改引用指向的实际对象
}
```
调用此方法时无需额外动作即可让实参与之关联起来并允许内部更改反映回外部环境之中。
另外一种显式的方法则是利用指针完成相同效果:
```cpp
void modifyPointerValue(int* ptrParam){
(*ptrParam)+=20;
}
```
这里需要注意区别于前者定义形式上存在`*`,表示该参数是一个地址位置而非具体数值本身;而在函数体内则需解引用(`*`)才能访问所存储的内容进行相应处理[^2]。
#### 实际应用案例分析
假设我们有一个需求是要交换两个整数的位置关系,则可以通过上述两种途径分别达成目标如下所示:
基于引用版本:
```cpp
#include <iostream>
using namespace std;
// Function prototype with pass-by-reference using &
void swapNumbers(int &a, int &b);
int main(){
int firstNumber =5 ,secondNumber=7 ;
cout<<"Before swapping:"<<endl;
cout<<firstNumber<<"\t"<<secondNumber<<endl;
// Call function passing variables directly since they are passed as references.
swapNumbers(firstNumber, secondNumber);
cout<<"After swapping:"<<endl;
cout<<firstNumber<<"\t"<<secondNumber<<endl;
return 0;}
void swapNumbers(int &x,int &y ){
int temp=x;
x=y;
y=temp;}
```
而如果选用指针风格的话代码会变成这样子的样子:
```cpp
#include <iostream>
using namespace std;
//Function Prototype With Pointer Parameters Instead Of References
void SwapUsingPointers(int *px, int *py);
int Main() {
Int FirstNum =89 ;Second Num=-34 ;
Cout << "Original Values:" << Endl;
Cout <<Firstnum<<"\t" Secondnum<<Endl;
//Passing Addresses To The Function For Swapping Through Pointers Mechanism
SwapUsingPointers(&FirstNum,&SecondNum );
Cout << "\nSwapped Results:\n";
Cout <<Firstnum<<"\t" Secondnum<<Endl;
Return 0;}
Void SwapUsingPointers(Int *Pxa,Int Pyb){
Int Temp=*Pxa;
*Pxa=*Pyb;
*Pyb=Temp;}
```
以上展示了如何运用C++特性有效地管理内存资源以及提升程序性能的同时保持逻辑清晰简洁.
### 结合第三方库的应用实例 - OpenCV中的图像旋转功能演示
考虑到实际开发过程中经常需要用到高效的数据结构或者算法支持,下面给出一段借助开源计算机视觉工具包OpenCV实现图片顺时针方向九十度翻转的小例子:
```cpp
#include <opencv2/opencv.hpp>
cv::Mat RotateImage(const cv::Mat& srcImg){
CV_Assert(!srcImg.empty());
Mat dstImg;
transpose(srcImg,dstImg);
flip(dstImg,dstImg,1);
return dstImg;
}
int main(){
String fileName="example.jpg"; // Replace this path according your local file location
Mat inputImage=imread(fileName,CV_LOAD_IMAGE_COLOR);
If(inputImage.empty()){
cerr<<"Could not load image..."<<fileName<<endl;
Return -1;
}
Time_t start=clock();
Mat rotatedResult=RotateImage(inputImage);
Printf("Time taken:%f seconds\n",(double)(clock()-start)/CLOCKS_PER_SEC);
NamedWindow("Input Image",WINDOW_AUTOSIZE );
imshow("Input Image",inputImage);
Namedwindow("Rotated Output", WINDOW_FREESIZE);
Imshow("Rotated Output",rotatedresult);
Waitkey(0);
DestroyAllWindows();
Returnsuccess;
}
```
在这个片段里可以看到除了基本语法之外还涉及到了矩阵运算等高级概念,这正是得益于像OpenCV这样的强大框架所提供的便利接口使得复杂任务变得简单可行[^3]。
阅读全文
相关推荐



















