引用(C++)

1、变量的引用

作用:给变量取别名
语法:数据类型 &别名=原名;

int main(){
int a=10;//定义a是整型变量,并赋值10
int &b=a;//声明b是a的"引用"
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
//比较两者的值,明确b就是a的别名,与a有同样的效果
return 0;
}

2、引用注意事项

1.声明一个引用时,必须初始化。
2.引用在初始化后,不能改变。

int main(){
int a=101;
int b=502;
//int &c; //错误,引用必须初始化
int &c=a;//一旦初始化,就不能更改
c=b;//这是赋值操作,不是把c作为b的别名

cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;

system("pause");
return 0;
}

3.不能建立引用数组。
4.不能建立引用的引用,也没有引用的指针。
5.可以取引用的地址。

3、引用作函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参。
优点:可以简化指针修改实参。

//1、值传递
void MySwap01(int a,int b){
int tem=a;
a=b;
b=tem;
}

//2、地址传递
void MySwap02(int* a,int* b){
int tem=*a;
*a=*b;
*b=tem;
}

//3、引用传递
void MySwap03(int &a,int &b){
int tem=a;
a=b;
b=tem;
}

int main(){
int a=101;
int b=502;
//值交换
MySwap01(a,b);//结果a=101,b=502;无作用
a=101,b=502;
Myswap02(&a,&b);//结果是a=502,b=101;有作用
a=101,b=502;
Myswap03(a,b);//结果是a=502,b=101;有作用
return 0;
}

4、引用作函数返回值

作用:引用是可以作为函数的返回值存在

注意:不能返回局部变量引用
用法:函数调用作为左值

int& test01(){
int a=10;//局部变量,出函数后内存就释放了
return a;
}
int& test02(){
static int b=101;//静态变量,存放在全局区,全局区的数据在程序结束后系统释放
return b;
}
int main(){
int &ref1=test01();
int &ref2=test02();
cout<<"ref1="<<ref1<<endl;//第一次结果正确,因为编译器做了保留
cout<<"ref1="<<ref1<<endl;//第一次结果错误,因为a的内存已经释放
cout<<"ref2="<<ref2<<endl;//正确
cout<<"ref2="<<ref2<<endl;//正确
cout<<"ref2="<<ref2<<endl;//正确
return 0;
}

5、引用的本质

本质:引用是一个指针常量,它的指向不能改变,只能指向一个指定的变量。引用的本质就是指针,引用就是用来简化指针的部分功能

6、常量引用

作用:用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改实参

void showval(const int &x)//const限制形参在函数中的值变化
{
x=20;//非法,const修饰,不能改值
cout<<x<<endl;
}
int main(){
int a=10;
showval(a);//打印a的值
return 0;
}
  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++/CLI中引用C++ dll有两种方式: 1. 静态链接 可以将C++ dll编译为静态库(.lib文件),然后在C++/CLI项目中将其链接为静态库,这样就可以在C++/CLI项目中直接调用C++ dll中的函数。 具体步骤如下: 1. 将C++ dll编译为静态库(.lib文件)。 2. 在C++/CLI项目中,右键单击项目名称,选择"属性"。 3. 在"属性"对话框中,选择"常规",然后在"附加包含目录"中添加C++ dll的头文件路径,在"附加库目录"中添加C++ dll的库文件路径。 4. 在"链接器"->"输入"中,将C++ dll的库文件名称添加到"附加依赖项"中。 5. 在C++/CLI项目中,可以使用以下代码来调用C++ dll中的函数: ```cpp #include "MyNativeLibrary.h" using namespace System; namespace MyCppCliLibrary { public ref class MyManagedClass { public: void CallMyFunction() { // 调用C++函数 MyFunction(); } }; } ``` 在上述代码中,`MyFunction`是一个在C++ dll中定义的函数,`MyManagedClass`是一个托管类,`CallMyFunction`方法直接调用`MyFunction`函数。 2. 动态链接 可以将C++ dll编译为动态链接库(.dll文件),然后在C++/CLI项目中使用动态链接库加载函数来调用C++ dll中的函数。 具体步骤如下: 1. 将C++ dll编译为动态链接库(.dll文件)。 2. 在C++/CLI项目中,使用以下代码来动态加载C++ dll: ```cpp #include <windows.h> typedef void(*MYFUNCTION)(); using namespace System; namespace MyCppCliLibrary { public ref class MyManagedClass { public: void CallMyFunction() { // 加载C++ dll HMODULE hModule = LoadLibrary(L"mylibrary.dll"); if (hModule == NULL) { // 加载失败 return; } // 获取C++函数指针 MYFUNCTION MyFunction = (MYFUNCTION)GetProcAddress(hModule, "MyFunction"); if (MyFunction == NULL) { // 获取失败 return; } // 调用C++函数 MyFunction(); // 卸载C++ dll FreeLibrary(hModule); } }; } ``` 在上述代码中,`MyFunction`是C++ dll中的函数,`MyManagedClass`是一个托管类,`CallMyFunction`方法使用`LoadLibrary`函数加载C++ dll,使用`GetProcAddress`函数获取`MyFunction`函数的指针,然后直接调用函数。最后,使用`FreeLibrary`函数卸载C++ dll。 需要注意的是,在使用动态链接库加载函数调用C++ dll时,需要使用`LoadLibrary`函数加载C++ dll,并使用`GetProcAddress`函数获取函数指针,然后在调用完毕后使用`FreeLibrary`函数卸载C++ dll。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值