指针上的&运算符

15 浏览
0 Comments

指针上的&运算符

我知道&会给出一个变量的地址。\n但是&在指针本身上有什么作用呢?\n

#include 
int main()
{
    int a = 10;
    int *p = &a;
    printf("%p" , p);
    printf("%d" , *p);
    printf("%d" , &p);
}

\n你能解释一下每个语句的作用吗?还有关于&p的格式说明符不确定。

0
0 Comments

(The & operator on a pointer)这个问题的出现的原因是因为对指针变量使用&运算符时,得到的是指针变量本身的地址,而不是指向的变量的地址。

解决方法是使用转换说明符%p来打印指针变量的地址,而不是使用%d,因为指针变量的地址是一个内存地址,需要使用%p来正确打印。

下面是问题的解答:

在C语言中,&运算符用于获取变量的地址。对于指针变量来说,使用&运算符得到的是指针变量本身的地址,而不是指向的变量的地址。

例如,假设有一个整型变量a和一个指向整型变量的指针变量p,声明如下:

int a = 10;

int *p = &a;

在这个例子中,变量p是一个普通的指针变量,类型为int *。要获取指针变量p的地址,可以使用表达式&p。

为了更好地显示这个问题,可以使用typedef来定义一个类型名,例如:

typedef int * T;

然后可以使用T来声明指针变量p,如下所示:

T p = &a;

这样,表达式&p就是指针变量p的地址,就像表达式&a是变量a的地址一样。

需要注意的是,当打印指针变量的地址时,必须使用转换说明符%p,而不是%d。因为指针变量的地址是一个内存地址,需要使用%p来正确打印。

例如,可以使用下面的代码来打印指针变量p的地址:

printf("%p\n", (void *)&p);

通过使用%p转换说明符,可以正确打印指针变量p的地址。

总结起来,当对指针变量使用&运算符时,需要注意得到的是指针变量本身的地址,而不是指向的变量的地址。要正确打印指针变量的地址,需要使用转换说明符%p。

0
0 Comments

指针p也是一个变量,当与指针变量一起使用时,&运算符会给出该指针变量的地址。要打印指针,使用格式指定符%p,并且理想情况下,传递给printf()的参数应该是void指针。所以,应该这样做:

printf("%p" , (void *)p);

.....

printf("%p" , (void *)&p);

这个语句

printf("%p" , p);

将打印变量a的地址。[参数p应该进行类型转换为(void *)。]

这个语句

printf("%d" , *p);

将打印变量a的值。

在这个语句中,使用的格式指定符是错误的,应该是%p

printf("%d" , &p);

^^

|

+-->%p

当你使用正确的格式指定符%p时,它将打印变量p的地址。[参数&p应该进行类型转换为(void *)。]

0