C++中&和*的用法一直是很是让人头疼的难点,课本博客上讲这些知识点通常都是分开讲其用法的,没有详细的总结,致使我在这方面的知识结构格外混乱,在网上找到了一篇英文文章简单总结了这两个符号的一些用法,都是一些比较基础的知识,我比较关心的函数指针,指针函数等都没有涉及到,从此有时间把这部分学明白整理出来。函数
C/C++中*和&的用法指针
C++语言是C语言的超集。几乎全部能够运行的C程序都是能够运行的C++程序。所以,写一个不包含C++特性的C++程序是可能的,尽管cout和引用的使用(见下文)更好的构成了一个C++程序。C++和C在代码格式上偶尔会有不一样,好比,在C语言中,咱们这样把p声明为一个int类型的指针 int p,而在C++中咱们使用int p(编译器并不在乎你使用的是哪一种格式)。内存
在C/C++中,*和&有不少用法,具体的使用要根据代码内容来肯定。编译器
C中*的用法博客
(a) 乘法运算:x=y*z;编译
(b) 乘法赋值运算:x*=y;至关于x=x*y基础
(c) 注释:/这里是你的注释/变量
(d) 指针的声明:int p 或 int p; 读法:p是指向一个整数类型的指针。引用
(e) 复合指针: int p; 或 int p; 读法 p是一个指向一个指向整数类型的指针的指针。(一样道理, int***p等等)程序
(f) 解引用: x=*p 把指针p指向的值赋值给x
&在C语言中的用法
(a) 逻辑与:if((a>1)&&(b<0))
(b) 位运算与:x=a&b;
(c) 逻辑与赋值:x&=y;与 x=x&y含义相同
(d) 求地址运算符:p=&x;读法:把x的地址赋给p(指针)
C++中&的补充用法
C++中有一种C不存在的变量类型引用变量(简单说来为引用),尽管在C语言中用指针也能够实现相似的功能。
引用,指针,地址是联系密切的概念。地址是在电脑内存中的地址(通常是一些变量的值在内存中的储存位置),指针是存地址的变量,因此指针能够“指向”内存地址。概念上讲,引用变量本质上是指针的另外一个名字(可是并不能被编译器实例化)
在函数内像其余变量同样定义一个引用是可能的;举例
void main(void)
{
int i;
int& r = i;
…
}
可是这是没有意义的,由于引用的使用和对引用的变量的使用是同样的。
引用在函数的参数中被使用。
void main(void)
{
int i=3;
f(i);
cout << i;
}
void f(int& r)
{
r = 2r;}这段程序输出“6”(2r使被r引用的变量加倍,也就是指i)在C语言中,实现一样的功能,咱们能够经过声明f()为void f(int *r),其中r是指向整数类型的指针,而后调用参数&i(i的地址)调用函数f(),在函数f()内使用r的解引用,可是显然,C++提供了一种更简明的经过引用的方式向函数传值,从函数中返回值。