&和*操作符
&和*都是单目操作符
&:取地址符
*:间接访问操作符(解引用操作符)
&用于取出想要变量的地址
我们通过以下代码来看看&以及*的作用。
int main()
{
int a = 10;
int * p = &a;
return 0;
}
我们定义了一个整型变量a,并给他赋值为10;又定义了一个变量p用来存放a的地址,
int * p = &a;
既然p是用来存放地址的,那么p就应该是一个指针变量,“*”即代表p是一个指针,前面的int说明变量p指向的类型是整型,“int *”合起来就是p的类型。
我们再来看下面的应用:
int main()
{
int a = 10;
int * p = &a;
int b = *p;
*p = 20; //解引用操作符
printf("a=%d\n", a);
return 0;
}
当p是一个指针变量时,在其前面加上一个*,这个*表示解引用操作符。
我们先来看这行代码:int b = *p;
就是创建一个变量b,使他的值等于p指向的空间里的内容,也就是a的值,这时,b的值就是10。这里的*p,用的是p指向的内容中的值。
再来看这行代码:*p = 20;
p里面存的是a的地址,*p就是通过a的地址找到a,然后把a的内容变为20。这里的*p,用的是p指向的内容的空间。
这里的*p,就可以提到左值、右值的概念了,简单的说,
左值——空间
右值——空间中的内容
数组也可以取地址
我们来看看
int main()
{
int a = 10;
int arr[10] = { 0 };
arr;//数组首元素的地址
&arr[0];//数组首元素的地址
&arr[9];//取出的是第10个元素的地址
&arr;//取出数组的地址
return 0;
}
另外还要知道
数组名就是首元素的地址
有2个例外:
- sizeof(数组名),这里的数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小
- &数组名,这里的数组名表示整个数组,取出的是数组的地址
以上就是我总结的&和*操作符的用法,希望对大家有帮助。
欢迎指教指点。
我的主页还有其他文章,欢迎和我一起学习。
点赞👍+关注我
让我们一起学习一起成长!