Pointers 指针*和&;差异

Pointers 指针*和&;差异,pointers,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、&t

我对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
n - 50
ptr - 2271924
*ptr - 50
x - 50
所以temp是指针。当我打印temp时,它会打印值“temp”*temp是指针的值或它指向的变量的地址。什么是临时工?这是指针本身的地址吗

我编写了第二个程序,其中我将指针指定给地址n(&n)

输出为:

temp - temp
*temp - 116
&temp - 00@
&(*temp) - temp
n - 50
ptr - 2271924
*ptr - 50
x - 50

n是50,x是未定义的。ptr指向n的地址。为什么*ptr打印50而*temp打印116?我定义这两个指针的方式有什么不同吗?我正在努力理解基本知识。谢谢。

当我们打印出*temp时,我们转到temp变量,找到它所在的地址(它指向的地址),然后打印出该位置中的任何数据

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

对于第二个程序,将n的地址(使用&)分配给ptr。这样,当我们选择调用*ptr时,它将找到存储在ptr中的地址(即n的地址),并打印出n保存的任何地址。然后将值*ptr点赋给,并将其存储在x中


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

objective c?标签?在这里,有一个potatoI正在网上学习objective-c课程。他们先通过c。特别是指针。StAdvOpk建议用C++标记。我删除了它。@ U-L是正确的,这是一个C问题(但我认为同样有效,虽然没有意义,但它是客观的C,因为语言是C的严格超集,不像C++)。你需要阅读初级C书的相关章节。好的。谢谢碳酸:)。酷名称。
*temp
是存储在内存地址中的值,等于存储在
temp
变量中的值(由
temp
指示)
&temp
temp
变量本身的内存地址(
temp
的地址)
&(*temp)
是存储在
temp
中的地址处的值的地址,该地址本身就是
temp
printf(“%s”,var)
var
解释为指向以null结尾的字符串的指针。谢谢Josh。为什么*temp打印出116。如果我理解你的逻辑,*temp应该按照地址打印出值,即“temp”,不是吗?当你指向一堆字符,如“temp”,指针实际上只指向其中的第一个字符,即t。T的asci值为116,您要求使用%d打印一个十进制数。如果你做了同样的事情,并要求打印出一个字符,我打赌这将是一个很好的捕获。这是有道理的。我想如果要打印出来,我会一直读到\0?或者在C中有更好的方法,但你已经回答了我所有的问题。谢谢大家!@U-L
%d
使
printf
将其参数解释为
int
<代码>%s将其解释为指向以null结尾的字符串的指针-它将继续从参数所指向的地址读取,直到到达
\0
。参数应该指向一个有效的位置(或者可能发生不同的不好的事情)。哦@PetrBudnik,那么我不确定当我尝试使用*ptr%s时为什么会出现“分段错误(内核转储)”。