Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能帮我澄清一些关于指针的困惑吗?在C中_C - Fatal编程技术网

有人能帮我澄清一些关于指针的困惑吗?在C中

有人能帮我澄清一些关于指针的困惑吗?在C中,c,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. 我不明白的是,指针的作用是占用另一个变量的地址,因为它的正确值或内容不是吗? 如果*a_ptr是值,那么它

我现在理解的是

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.
我不明白的是,指针的作用是占用另一个变量的地址,因为它的正确值或内容不是吗?
如果
*a_ptr
是值,那么它不应该是
*a_ptr=&a


谢谢

把指针想象成路标:它告诉你在哪里可以找到东西。不多不少。指针之所以存在,是因为它是一个我们非常熟悉的概念。C按值传递一切。让我们用一个牵强的类比,我相信,它会为你澄清一些事情:

想象一下,你正在度假,并告诉别人你住过的酒店。与其详细描述,不如告诉对方姓名、地址,也许还有更多的细节可以帮助某人找到那个地方。你不会开始详细描述整个事情,也不会拆毁酒店并随身携带,更不用说每次告诉别人都要重建

返回C:C按值传递所有内容。在这个类比中,这就像是给每个人一个1比1比例的复制品。这既昂贵又耗时,而且真的很烦人。你给的人一份酒店的副本可以改变它,但你永远不知道:有一个共同的起点(原来的酒店),但每个副本都是相互独立的

就像在现实生活中一样,你只需写下酒店的地址,然后发给家人和朋友。这就是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),则其行为未定义

我在过去使用过不同的类比来解释如何看待指针以使其更容易理解,我在不久前写过这篇文章,不知道这是否能让事情变得更清楚,但我想我应该在这里发布链接:


把指针想象成路标:它告诉你在哪里可以找到东西。不多不少。指针之所以存在,是因为它是一个我们非常熟悉的概念。C按值传递一切。让我们用一个牵强的类比,我相信,它会为你澄清一些事情:

想象一下,你正在度假,并告诉别人你住过的酒店。与其详细描述,不如告诉对方姓名、地址,也许还有更多的细节可以帮助某人找到那个地方。你不会开始详细描述整个事情,也不会拆毁酒店并随身携带,更不用说每次告诉别人都要重建

返回C:C按值传递所有内容。在这个类比中,这就像是给每个人一个1比1比例的复制品。这既昂贵又耗时,而且真的很烦人。你给的人一份酒店的副本可以改变它,但你永远不知道:有一个共同的起点(原来的酒店),但每个副本都是相互独立的

就像在现实生活中一样,你只需写下酒店的地址,然后发给家人和朋友。这就是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),则其行为未定义

我在过去使用过不同的类比来解释如何看待指针以使其更容易理解,我在不久前写过这篇文章,不知道这是否能让事情变得更清楚,但我想我应该在这里发布链接:

如果
*a_ptr
是值,那么它不应该是
*a_ptr=&a

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

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

如果
*a_ptr
是值,那么它不应该是
*a_ptr=&a

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