30秒了解C语言指针的&与*操作
指针是一种存储变量地址的数据类型,它可以用来访问或修改变量的值,或者实现动态内存分配、数组、链表、函数参数等功能。&和*运算符分别称为取地址运算符和解引用运算符,它们的作用和用法如下:
- &运算符:&运算符可以用来获取一个变量的地址,返回一个指向该变量的指针。例如,下面的代码片段:
int a = 10; // 定义一个整型变量a,赋值为10
int *p = &a; // 定义一个指向整型的指针p,赋值为a的地址
表示将变量a的地址赋值给指针p,使得p指向a。我们可以用printf("%p\n", p);来打印p的值,也就是a的地址。我们也可以用printf("%p\n", &a);来直接打印a的地址,结果和p的值相同。
- *运算符:*运算符可以用来获取一个指针所指向的变量的值,返回一个该变量的引用。例如,下面的代码片段:
int a = 10; // 定义一个整型变量a,赋值为10
int *p = &a; // 定义一个指向整型的指针p,赋值为a的地址
printf("%d\n", *p); // 打印*p的值,也就是a的值
表示将p所指向的变量a的值打印出来,结果为10。我们也可以用*p = 20;来修改p所指向的变量a的值,使得a变为20。
需要注意的是,&和运算符是互逆的,即*&x == x和&*x == x都成立,其中x可以是任何合法的表达式。另外,&和运算符都有较高的优先级,并且从右往左结合,所以在使用它们时要注意括号的使用。例如,下面的代码片段:
int a = 10, b = 20; // 定义两个整型变量a和b,分别赋值为10和20
int *p = &a, *q = &b; // 定义两个指向整型的指针p和q,分别赋值为a和b的地址
*p = *q + 5; // 修改p所指向的变量a的值,使得a等于*q加5,也就是b加5,即25
表示将b加5后赋值给a。如果没有括号,那么*p = *q + 5;就相当于*(p = *q) + 5;,表示将*q赋值给p后再加5,这显然不是我们想要的结果。
以上就是我对C语言指针&与*的简要介绍,希望对你有所帮助。
下一篇:C语言-用指针改变实参