繁体   English   中英

有人可以帮我清楚一些关于指针的混淆吗? 在C.

[英]Could someone help me clear some confusions about pointers? in C

我现在理解的是。

int a = 100;
int *a_ptr; // creates pointer variable named a_ptr and points to type int
a_ptr = &a; // a_ptr is address of a
*a_ptr = 5; // value of pointer = value of a now set to 5.

我不明白的是,指针的重点是占据另一个变量的地址,因为它的正确值或内容不是吗?
if *a_ptr是值不应该是*a_ptr = &a;

代表概念的图

谢谢

将指针想象成路标:它会告诉您在哪里可以找到某些东西。 没有更多,没有更少。 存在指针的价值/原因是因为它是我们实际上都非常熟悉的概念。 C按值传递所有内容。 让我们使用一个牵强附会的类比,我相信,这将为您清除一些事情:

想象一下,在度假,并告诉别人你在下榻的饭店,而是描述非常详细的,你给对方的姓名,地址, 也许一些更多的细节,可以帮助别人找到的地方。 不会着手在详细描述了整个事情,也不是你想要颠覆这个酒店下来并随身携带,更何况每一次你告诉别人关于它的时间重建。

回到C:C按值传递所有内容。 在这个比喻中,这就像把每个人一对一的比例复制到你正在疯狂的酒店。 这是昂贵的,耗时的,真的很烦人。 你给酒店副本的人可以改变它,但你永远不会知道:有一个共同的起点(原始酒店),但每个副本在此之后是相互独立的。

就像在现实生活中一样,你只需写下酒店的地址,然后把它交给家人和朋友。 这就是C用指针做的事情:它告诉你在哪里可以找到某些东西( struct hotel或者int ),而其他人可以使用该地址去旅行。
额外的好处是,如果你的一些朋友实际访问了那个地方,他们可以告诉你它在某些方面有所改变:颜色现在是绿色,而不是蓝色,所有者已经改变等等......

使用该地址,每个拥有该地址的人都可以访问有关该地点的最新信息。
如果酒店关闭,地址变得毫无意义,但当然,如果有人使用你给他们的地址认为他们会留在一个好地方,他们会生气。 接下来发生的事情很难预测(未定义的行为)。

所以在恢复时:

int x = 123;// a hotel
int *x_address = &x;//an address to the hotel
int *for_friend = &x;
int *friend2 = &x; // you can hand out sever addresses to the same hotel
*x_address += 1; // read this as *(travel to)x_address to arrive at hotel X, and stay += 1 night or something
//friend2 wants to see how many nights were spent in hotel x:
printf("%d\n", *friend2);//124 -> 123 originaly + *x_address += 1

如果x超出范围,那相当于酒店关闭。 如果sombody *x_address (前往x),则其行为未定义。

我过去曾用过不同的类比来解释你可以用什么方式看指针让它们更容易理解,我已经写了一段时间,不知道这是否让事情更清楚,但我想我我只是在这里发布链接:

指针很简单

if *a_ptr是值不应该是*a_ptr = &a;

*a_ptr是值,但&a不是值,即指向值的指针,因此它们具有不同的类型。

因此,可以通过指针设置值*a_ptr = a ,或者可以将指针设置为指向值a_ptr = &a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM