指针*和&区别

时间:2013-12-07 00:10:05

标签: pointers

我对objective-c中的指针感到困惑。我写了一个非常简单的程序试图理解

char* temp = "temp";
printf("temp - %s \n", temp);
printf("*temp - %d \n", *temp);
printf("&temp - %s \n", &temp);
printf("&(*temp) - %s \n", &(*temp));

在此示例中,temp是指向char的指针,默认值为“temp”。 * temp,& temp是什么意思?输出是:

temp - temp
*temp - 116
&temp - 00@
&(*temp) - temp

所以temp是指针。当我打印temp时,它会输出值“temp”。 * temp是指针的值或它指向的变量的地址。什么是& temp?这是指针本身的地址吗?

我写了第二个程序,在其中我指定了n(& n)地址的指针。

int n = 50, x;
int *ptr;
ptr = &n;
x = *ptr;

printf("n - %d\n", n);
printf("ptr - %d\n", ptr);
printf("*ptr - %d\n", *ptr);
printf("x - %d\n", x);

输出结果为:

n - 50
ptr - 2271924
*ptr - 50
x - 50

n为50且x未定义。 ptr指向n的地址。为什么* ptr打印50和*临时打印116?我是如何定义两个指针的区别?我想了解基础知识。谢谢。

1 个答案:

答案 0 :(得分:0)

当我们打印出* temp时,我们转到temp变量,找到它所持有的地址(它所指向的地址),而不是打印出该位置的任何数据。

当我们打印出& temp时,我们要求的是temp变量的地址,而不是它指向的地址。

对于第二个程序,将n的地址(使用&)分配给ptr。这样,当我们选择调用* ptr时,它将找到存储在ptr(即n)中的地址,并打印出n持有的任何内容。因此,您随后将值* ptr指定给,并将其存储在x。

总之,在声明指针时,&将打印出变量的地址,*将打印出它指向的内容,前面的任何内容都不会打印出它所指向的变量的地址。