详解C/C++ 的*和&用法

C/C++中 * 的用法

1>最简单的乘法:

a*b;

2>可以注释:

/**/

3>指针:(最重要)

指针是指向变量的地址
简单的例子分析:

int main()
{
	int a = 3;
	int *b = &a;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	*b = 10;
	cout << "&a:" << &a << endl;
	cout << "b:" << b << endl;
	system("pause");
}

结果:

a:3
b:00EFFE28
&a:00EFFE28
b:00EFFE28
a:10
分析:
b是a的指针,指向a的地址。(也就是a与b相连,只要修改*b的值,a的值也跟着改动)

C/C++中 & 的用法

1>位运算符

a&b

2>逻辑与 &&

if((a==0)&&(b==0)){}

3>引用 &(最重要)

引用可说把a变量换了一个名字为b即:

&b=a

简单的例子分析:

//引用
int main()
{
	int a = 3;
	int &b = a;
	int c = a;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	cout << "c:" << c << endl;
	b = 10;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	cout << "c:" << c << endl;
	cout << "&a:" << &a << endl;
	cout << "&b:" << &b << endl;
	cout << "&c:" << &c << endl;
	system("pause");
}

结果:
a:3
b:3
c:3
a:10
b:10
c:3
&a:0019FD74
&b:0019FD74
&c:0019FD5C
分析:
& 引用 :比如说,一个人有多少外号,但都是指这个人,引用也是这样。如果b的值改动了,也就代表了a的值改动了。

(核心)函数的参数 1>函数传入普通参数

//函数传入普通参数
void fun(int a,int b)
{
	int c = 0;
	c = a;
	a = b;
	b = c;
}
int main()
{
	int a = 1;
	int b = 2;
	cout << a << "," << b << endl;
	fun(a, b);//a,b交换
	cout << a << "," << b << endl;
	system("pause");
	return 0;
}

结果:
1,2
1,2
分析:
函数传入的是形参,不会改变main()中a,b的地址,也就是不会改变a,b的值。

2>函数传入指针参数

//函数传入指针参数
void fun(int *a, int *b)
{
	int c = 0;
	c = *a;
	*a = *b;
	*b = c;
}
int main()
{
	int a = 1;
	int b = 2;
	cout << a << "," << b << endl;
	fun(&a, &b);//a,b交换
	cout << a << "," << b << endl;
	system("pause");
	return 0;
}

结果:
1,2
2,1
分析:
函数的参数传入的是指针,即地址。函数中a,b的交换是地址的交换。最后main()中的a,b的值也就改变了。

3>引用传入函数参数(简单–好操作)

//引用传入函数参数
void fun(int &a, int &b)
{
	int c = 0;
	c = a;
	a = b;
	b = c;
}
int main()
{
	int a = 1;
	int b = 2;
	cout << a << "," << b << endl;
	fun(a, b);//a,b交换
	cout << a << "," << b << endl;
	system("pause");
	return 0;
}

结果:
1,2
2,1
分析:
本质上是把main()中的a,b变量 换了个名字,即:函数中的a,b,函数中的a,b地址与main()中的地址是一样的。如果函数中的a,b值改变的,那么main()中的a,b的值也跟着改变。

这一篇博客总结了初接触c/c++ 的指针,地址,引用 最为疑惑和困难的地方。同时,也是最重要的知识。

到此这篇关于详解C/C++ 的*和&的文章就介绍到这了,更多相关C/C++ 的*和&内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • c++中vector&lt;int&gt;和vector&lt;int*&gt;的用法区别

    在使用STL容器(比如map.list.vector等)的时候,是用放一个对象还是放一个对象指针,即是用vector<int>还是vector<int*>,这里的vector可以换成其他的容器,int可以换成其他基本类型,也可以自定义的数据结构或类. 首先,要说明的是,这两种方式,怎么用都可以实现功能,把一组整型数放到容器里.先看看两种方式在使用的时候的区别. 1.vector<int> 复制代码 代码如下: vector<int> vecTemp;for

  • C/C++中*和&的用法详解

    C++中&和*的用法一直是非常让人头疼的难点,课本博客上讲这些知识点一般都是分开讲其用法的,没有详细的总结,导致我在这方面的知识结构格外混乱,在网上找到了一篇英文文章简单总结了这两个符号的一些用法,都是一些比较基础的知识,我比较关心的函数指针,指针函数等都没有涉及到,今后有时间把这部分学明白整理出来. C/C++中*和&的用法 C++语言是C语言的超集.几乎所有可以运行的C程序都是可以运行的C++程序.因此,写一个不包含C++特性的C++程序是可能的,尽管cout和引用的使用(见下文)更好

  • c++ *运算符重载

    运算符重载,对象和指向对象的指针 直接上code 复制代码 代码如下: #include <iostream> using namespace std;  class test {     public:         int a;         test() : a(0){}         test &operator*(){             cout << "operator*" << endl;             c

  • 详解Oracle游标的简易用法

    下面看下Oracle游标的简易用法,具体代码如下所示: create or replace procedure NW_DelYW(iOPERATION_ID number, sUserID varchar2) is sCurDJBH yw_operation_link.djbh%type; cursor table_yw(ywid yw_operation.id%type) is select * from yw_operation_link t1 where t1.operation_id =

  • Node.js API详解之 tty功能与用法实例分析

    本文实例讲述了Node.js API详解之 tty功能与用法.分享给大家供大家参考,具体如下: tty 可以理解为终端的意思.tty 模块提供终端相关的接口,用来获取终端的行数列数等. 通过 const tty = require('tty'); 的方式引用 tty 模块 process.stdout.isTTY 说明: 此属性位于 process 模块,用来判断 Node.js 是否运行在一个 TTY 环境中 demo: console.log(process.stdout.isTTY) //

  • 详解shell 变量的高级用法示例

    变量删除和替换 案例:从头开始匹配,将符合最短的数据删除 (#) variable_1="I love you, Do you love me" echo $variable_1 variable_2=${variable_1#*ov} echo $variable_2 案例:从头开始匹配,将复合最短的数据删除(##) varible_3=${variable_1##*ov} echo $varible_3 案例:替换字符串,只替换第一次匹配成功的(/) echo $PATH var6

  • 详解C# 中Session的用法

    Session模型简介 在学习之前我们会疑惑,Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每 个用户首次与这台WWW服务器建立连接时,他就与这个服务器建立了一个Session,同时服务器会自动为其分配一个SessionID,用以标识这个用 户的唯一身份.这个SessionID是由WWW服务器随机产生的一个由24个字符组成的字符串,我们会在下面的实验中见到它的实际样子. 这个唯一的SessionID是有

  • 详解C++中mutable的用法

    代码编译运行环境:VS2017+Win32+Debug mutalbe的中文意思是"可变的,易变的",是constant(即C++中的const)的反义词.在C++中,mutable也是为了突破const的限制而设置的,被mutable修饰的变量将永远处于可变的状态. mutable的作用有两点: (1)保持常量对象中大部分数据成员仍然是"只读"的情况下,实现对个别数据成员的修改: (2)使类的const函数可以修改对象的mutable数据成员. 使用mutable

  • 详解Docker Swarm概念与用法

    Docker Swarm是Docker公司开发的容器集群管理服务.从1.12.0版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为Swarm Mode,无需额外安装. 与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用.但是它与docker-compose兼容的优点,可以弥补一切.对于没有集群使用经验的小白,用Docker Swarm起步,是一个很好的选择. 概念 Docker Swarm,主要包含以下概念: Swarm Node Stack S

  • 详解c# 接口IDisposable的用法

    C#的每一个类型都代表一种资源,而资源又分为两类: 托管资源  由CLR管理分配和释放的资源,即从CLR里new出来的对象. 非托管资源  不受CLR管理的对象,如Windows内核对象,或者文件.数据库连接.套接字.COM对象等. 如果类型用到了非托管资源,或者需要显式释放托管资源,那么需要让类型继承接口IDisposable.记住:如果类型需要显式释放资源,那么一定要继承IDisposable接口.如: class SampleClass:IDisposable { private IntP

  • 详解Golang中Channel的用法

    如果说goroutine是Go语言程序的并发体的话,那么channels则是它们之间的通信机制.一个channel是一个通信机制,它可以让一个goroutine通过它给另一个goroutine发送值信息. 1 创建channel 每个channel都有一个特殊的类型,也就是channels可发送数据的类型.一个可以发送int类型数据 的channel一般写为chan int.使用内置的make函数,如果第二个参数大于0,则表示创建一个带缓存的channel. ch := make(chan in

  • 详解Python的lambda函数用法

    lambda函数用法 lambda非常重要的一个定义.lambda在[运行时]才绑定,[不是]在定义的时候绑定.下面这个列子: 本意想:让X分别与0到1的数相加.x+0,x+1,x+2,x+3 实际运行结果是: 0 0 0 0 原因就是上面提到的,运行时才绑定.先运行的for循环,无法捕捉到循环. func = [lambda x: x + n for n in range(4)] # x+n,n是从0到3 For循环,x+0,x+1,x+3 for f in func: print(f(0))

  • 详解c++优先队列priority_queue的用法

    既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的 和队列基本操作相同: top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数 push 插入元素到队尾 (并排序) emplace 原地构造一个元素并插入队列 pop 弹出队头元素 swap 交换内容 定义:prio

随机推荐