C语言 指针运算符与取地址运算符
与指针相关的运算符有两个:
(1)取地址运算符“&”:该运算符的功能是取出一个变量的地址。例如,使用scanf()函数输入变量的值:
scanf ("%d",&x);
(2)指针运算符:也可以叫做间址运算符或指向运算符。使用形式为:
*指针变量
例如:
main()
{
int a=10;
int *p;
p=&a;
printf("%d",a);
printf("%d",*p);
主函数的第一条语句和第二条语句,分别定义了一个普通变量a和一个指针变量p。而第三条语句p=&a,将指针p指向变量a,也就是将a的地址存储在指针p中。一旦指针p与变量a有了指向关系,就可以用来引用变量a的值,所以主函数的最后一句出现的*p就代表了变量a的值。
如果在程序中想对变量a用scanf()函数输入数据,可以使用:
scanf("%d",&x);
假设变量a与指针p有了指向关系p=&a,scanf()函数也可以写成如下形式:
scanf("%d",p);
因为P本身就代表了变量a的地址,所以可以将键盘输入的值送入到a的地址中。但注意不要写成如 下形式:
scanf("%d",&p);
这种写法意味着想输入一个值送到指针p的地址中,而不是指针p所指向的变量的地址中,所以用法是错误的。
如果理解了指针运算符的含义,假设有定义:
int a=5, *p;
*p=&a;
则表达式a、*p、*&a是等价的。其中表达式“*&a”的含义是,先取变量a的地址,再用指针运算符“*”取出该地址中存放的值,其实质还是“a”。
而表达式&a、p、&*p是等价的。对于表达式的操作顺序为,先计算*p,*p其实就是a, 之后再取地址。所以本质和&a是一样的。
点击加载更多评论>>