位置:首页 > 软件操作教程 > 编程开发 > C语言 > 问题详情

C语言 指针运算符与取地址运算符

提问人:刘团圆发布时间:2020-12-01

与指针相关的运算符有两个:

(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是一样的。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部