C++是我们许多人在步入程序设计的时候的第一个入门语言。但是,这个语言当中也有好多难以理解的概念。在这里简单介绍一下两种地址符号。
在介绍这两个符号之前,我们先说明一下C++当中的两个概念,变量和地址。
变量里存在两个值,一个是变量在内存中存着的位置,也就是地址,另外一个就是这个变量的值,存在内存当中。
另外一个是地址,只记录地址信息。
符号“&”
这个符号在运算当中用于计算位运算的“且”。同时也可以对变量应用**(只能对变量应用,不能对地址使用)**,被&修饰的变量的含义是这个变量的地址。
int main()
{
int x=5;
int *p=&x;
printf("%p\n",p);
}
用一个便于理解的话来说,可以理解地址符&是一个C++自带的函数,它的作用是求出一个变量的地址。
如果用&来修饰函数的形参的话,则表示直接取这个数的地址
void swap(int &x,int &y)
{
int temp;
x=y;
y=temp;
}
int main()
{
int x=5,y=6;
swap(x,y);
}
我们都知道,函数的形参是将实参的值拷过来,形成一个副本,在使用地址符&修饰之后,我们传过来的是这个实参的地址,而最后的结果就是,我们在函数当中,可以直接对这个实参进行修改了,比如以上这个交换函数,就是利用这个原理。
符号“*”
这个符号除了在运算上代表乘法以外,同时也可以对指针使用**(不能对变量使用)**
注:指针不能被赋值为整数,不能手动赋值,编译器会报错,面试可能会问到
#include<stdio.h>
int main()
{
int x=5,y=6;
int *p=x; //错误
int *q=3; //错误
int *o=&x; //正确
}
被“*”修饰的地址的含义是,这个地址所指向的内存位置的值,或者我们可以理解这是一个能够求出指针指向的数的值的函数。我们来看一下在函数当中的作用
void print(int *x)
{
printf("%d\n",*x); //通过*x来读取指针x指向的值
}
int main()
{
int x=5;
print(&x);
int *p=new int; //给指针p手动分配一个int类型的空间
*p=6; //通过*p来读取p指向的值
print(p);
}
当函数形参是int类型指针的时候,我们传进去的,也是指针,想要读取指针所指向的内容,就需要使用指针符号修饰。虽然感觉花里胡哨的,只要明白原理,就不会被迷惑。