C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。

普通变量引用: 引用的实质就是取别名,&写到等号左侧叫引用,写到等号右侧叫取地址.

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int x = 10; int &tmp = x; // 普通引用
int *ptr = &x; // 定义指针 cout << "tmp => "<< &tmp << endl;
cout << "x => "<< &x << endl;
cout << "ptr => " << ptr << endl; system("pause");
return 0;
}

普通数组引用: 普通数组应用指针类型。

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int Array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 第一种引用取别名的方式
int(&p_array)[10] = Array; // 给数组取别名(引用数组) // 用别名输出引用数据
for (int x = 0; x < 10; x++)
cout << p_array[x] << " "; // 第二种引用取别名的方式
typedef int(type_array)[10]; // 定义具有10个元素的数组
type_array &type_ptr = Array;
for (int x = 0; x < 10; x++)
cout << type_ptr[x] << " "; system("pause");
return 0;
}

向函数中传递引用: 参数传递3种方式,传递数值,传递地址,还可以传递引用.

#include <iostream>

using namespace std;

// 传递引用实现对换
void MySwap(int &x, int &y)
{
int tmp = x;
x = y;
y = tmp;
cout << "MySwap ==> x = " << x << endl;
} // 传递指针实现对换
void MySwap_PTR(int *x, int *y)
{
int tmp = *x;
*x = *y;
*y = tmp;
cout << "MySwap_PTR ==> x = " << *x << endl;
} int main(int argc, char* argv[])
{
int x = 10;
int y = 20; cout << "x = " << x << endl;
MySwap(x, y);
cout << "x = " << x << endl; system("pause");
return 0;
}

返回引用的函数: 将一个函数定义为可引用的类型,可在表达式内使用左值引用。

#include <iostream>

using namespace std;

int & dowork()
{ // 局部变量x,返回前销毁,引用则不存在了
int x = 10;
cout << "x = " << x << endl;
return x;
} int main(int argc, char* argv[])
{
int &ret = dowork(); cout << ret << endl; // 第一次输出正常
cout << ret << endl; // 第二次输出由于引用被释放,所以就会产生错误 dowork() = 1000; // 引用也可以作为左值使用
int re_ret = dowork() = 1000; // 相当于执行 re_ret = x = 1000;
cout << re_ret << endl; system("pause");
return 0;
}

定义常量引用: 常量引用一般情况下不可修改,但是我们可以通过分配新的内存的方式强行修改它.

#include <iostream>

using namespace std;

int dowork()
{
const int &ref = 100; // 常量应用无法被修改 // 如果真的想要修改,我们可以使用以下方式
int *ptr = (int*)&ref;
*ptr = 2000; return ref;
} int do_work(const int &val)
{
int *ptr = (int*)&val;
*ptr = 1000;
return val;
} int main(int argc, char* argv[])
{
int ret = dowork();
cout << ret << endl; int ret_val = do_work(10);
cout << ret_val << endl; system("pause");
return 0;
}

定义指针引用: 通过指针的方式引用函数。

#include <iostream>

using namespace std;

struct Person { int m_age; };

void allocat(Person **ptr)
{
*ptr = (Person *)malloc(sizeof(Person));
(*ptr)->m_age = 100;
} void allocatByref(Person* &ptr)
{
ptr = (Person *)malloc(sizeof(Person));
ptr->m_age = 1000;
} int main(int argc, char* argv[])
{
// 普通开辟空间写法
struct Person *ptr = NULL;
allocat(&ptr);
cout << "ptr --> " << ptr->m_age << endl; // 使用指针引用开辟空间
Person *ptr_byref = NULL;
allocatByref(ptr_byref);
cout << "ptr_byref --> " << (*ptr_byref).m_age << endl; system("pause");
return 0;
}

8.2 C++ 引用与取别名的更多相关文章

  1. 在WHERE子句中引用取别名的列

    版权说明:作者:张颖希(PocketZ's Blog)出处:http://www.cnblogs.com/PocketZ本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页 ...

  2. 1.6 在WHERE子句中引用取别名的列

    如下查询,会抛出错误:mysql> select sal as salary, comm as commission from emp where salary < 5000;ERROR ...

  3. 1.06 在WHERE子句中引用取别名的列

    如下查询,会抛出错误: mysql> select sal as salary, comm as commission from emp where salary < 5000;ERROR ...

  4. [转载]C++中 引用&与取地址&的区别

    一个是用来传值的 一个是用来获取首地址的 &(引用)==>出现在变量声明语句中位于变量左边时,表示声明的是引用.     例如: int &rf; // 声明一个int型的引用r ...

  5. C++中 引用&与取地址&的区别

    微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...

  6. mysql合并查询结果及为表和字段取别名

    利用union关键字,可以给出多条select语句,并将它们的结果组合成单个的结果. 合并是,两个表对应的列数和数据类型必须相同. 各个select语句之间使用union或union all关键字分隔 ...

  7. 使用Spring实例化Bean的方法以及Bean取别名

    一.通过构造方法实例化Bean bean中加构造方法 public class Bean1 { public Bean1() { System.out.println("Bean1构造方法. ...

  8. C++中引用与取地址

    所谓引用就是为对象起一个别名.例如变量b = &a,b就是a的一个引用.对b的任何操作等同于对a的操作,也就是说,如果你改变了b的值,同时a的值也会发生改变.b就是a的另外一个名字,他们实质是 ...

  9. 对于多个列的转行(一个值均匀分布在两个列中),对于个别字段通过取别名,join方式解决。

    例如,这个表的结构: select r.* from RPDATA2016 r WHERE r.data_bbid='HY052' 如图 对于最后两列,如果是字符类型,会存在倒数第二列,是数字类型,会 ...

  10. C语言中 指针、引用和取值

    指针是一个存储计算机内存地址的变量.从指针指向的内存读取数据称作指针的取值.指针可以指向某些具体类型的变量地址,例如int.long和double.指针也可以是void类型.NULL指针和未初始化指针 ...

随机推荐

  1. 聊聊大语言模型(LLM)的 10 个实际应用

    近期,苹果公司正在悄悄研究可以挑战的 OpenAI.谷歌和其他公司的 AI 工具,建立了自己的框架来创建大语言模型,并创建了一个聊天机器人服务,一些工程师称之为"Apple GPT" ...

  2. 容器卡在terminate状态无法删除

    1. pod卡在terminate状态无法删除.一般是lxcfx 卡住 或者 logcounter组件进程读容器数据盘分区导致的 2.  验证一下我们的猜测 cat /sys/fs/fuse/conn ...

  3. 离散化/线段树 (POJ - 2528 Mayor's posters)

    Mayor's posters https://vjudge.net/problem/POJ-2528#author=szdytom 线段树 + 离散化 讲解:https://blog.csdn.ne ...

  4. [kuangbin]专题九 连通图 题解+总结

    kuangbin专题链接:https://vjudge.net/article/752 kuangbin专题十二 基础DP1 题解+总结:https://www.cnblogs.com/RioTian ...

  5. Hystrix 如何解决 ThreadLocal 信息丢失

    本文分享 ThreadLocal 遇到 Hystrix 时上下文信息传递的方案. 一.背景 笔者在业务开发中涉及到使用 ThreadLocal 来存放上下文链路中一些关键信息,其中一些业务实现对外部接 ...

  6. CompletableFuture 测试类

    package com.example.apidemo.completableFutrue; import java.util.Random; import java.util.concurrent. ...

  7. k8s探针详解

    一.探针类型 Kubernetes(k8s)中的探针是一种健康检查机制,用于监测Pod内容器的运行状况.主要包括以下三种类型的探针: 1.存活探针(Liveness Probe) 2.就绪探针(Rea ...

  8. 【驱动】I2C驱动分析(一)-I2C驱协议简介

    什么是 I²C I²C 叫集成电路总线 它是一种串行通信接口,具有双向两线同步串行总线,通常由两根线组成--SDA(串行数据线)和SCL(串行时钟线)和上拉电阻. 它们用于需要许多不同部件(例如传感器 ...

  9. C#通过泛型实现对子窗体的不同操作

    private void button1_Click(object sender, EventArgs e) { FormOperate<object>();//调用FormOperate ...

  10. pmp考试巩固知识点

    1.冲刺评审会是需要相关的干系人参加的,在冲刺评审会上干系人可以审查并澄清角色.责任和管理模式2.采购中的争议,往往找合同和SOW,SOW是对需要采购的详细范围的描述,与供应商在可交付成果方面有争议时 ...