Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.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
Pointers 字符串指针_Pointers_Go - Fatal编程技术网

Pointers 字符串指针

Pointers 字符串指针,pointers,go,Pointers,Go,考虑以下程序(): 我的目标是调用函数并更改字符串的值。可以使用第二个函数,但不能使用第一个函数 问题:与dest=&src相比,*dest=src的含义是什么?我猜前者是“dest的内容现在是src”,后者是“更改dest变量,使其现在指向src的地址”,它丢弃了前面的值,但不是a的内容。但即使我是对的,我也不明白*dest=src是如何工作的 我希望我的问题不要太模糊 *dest = src is:将dest指向的值设置为src中的值。所以它是有效的 dest = &src is

考虑以下程序():

我的目标是调用函数并更改字符串的值。可以使用第二个函数,但不能使用第一个函数

问题:与
dest=&src
相比,
*dest=src
的含义是什么?我猜前者是“dest的内容现在是src”,后者是“更改dest变量,使其现在指向src的地址”,它丢弃了前面的值,但不是a的内容。但即使我是对的,我也不明白
*dest=src
是如何工作的

我希望我的问题不要太模糊

*dest = src
is:将
dest
指向的值设置为
src
中的值。所以它是有效的

dest = &src
is:将
dest
的值设置为
src
的地址。由于dest是
changeStringValueNotOK
的一个形式参数,因此更改(仅针对指针,而非指针对象)仅在本地可见。由于未真正使用更改的值,因此其总体效果是“无”操作

is:将
dest
指向的值设置为
src
中的值。所以它是有效的

dest = &src

is:将
dest
的值设置为
src
的地址。由于dest是
changeStringValueNotOK
的一个形式参数,因此更改(仅针对指针,而非指针对象)仅在本地可见。由于未真正使用更改的值,因此其总体效果为“无操作”。

为了帮助以图形方式将其可视化,在您的主要功能中,您有以下功能:

  Data          Variables

|  ...  |
 -------
| Hello |<----- <a string>
 -------
| World |<----- <b string>
 -------
|  ...  |
请注意,这会有效地更改
a
本身,因此当您返回到前面的范围时,您将观察到更改

另一方面,如果执行
dest=&src
,则会得到:

  Data                           Parameters

|  ...  |
 -------
| Hello |                        <dest *string> ----,
 -------                                            |
| World |<---------------------- <src string>  <---/
 -------
|  ...  |
数据参数
|  ...  |
-------
|你好,
-------                                            |

|World |为了帮助以图形化的方式将其可视化,您的主要功能包括:

  Data          Variables

|  ...  |
 -------
| Hello |<----- <a string>
 -------
| World |<----- <b string>
 -------
|  ...  |
请注意,这会有效地更改
a
本身,因此当您返回到前面的范围时,您将观察到更改

另一方面,如果执行
dest=&src
,则会得到:

  Data                           Parameters

|  ...  |
 -------
| Hello |                        <dest *string> ----,
 -------                                            |
| World |<---------------------- <src string>  <---/
 -------
|  ...  |
数据参数
|  ...  |
-------
|你好,
-------                                            |

|World |第一个实际上是“将dest指向的值设置为src中的值”。我相信你理解它,但是你的措辞让它听起来好像src正在改变。第一个是“将dest指向的值设置为src中的值”。我相信你理解它,但是你的措辞让它听起来像是src正在改变。这不是你的问题,所以就像一些可能不相关的反馈:这种习惯用法在C中很常见,但在Go中实现这一点的习惯用法是返回更改后的值。我在我的命令行选项解析器(foo=bar)中使用它:将参数栏保存在给定(字符串)变量中。虽然使用
&此处转到参数
,界面看起来有点干净,但我仍然不确定支持什么。谢谢你的反馈!这不是你的问题,正如一些可能不相关的反馈:这种习惯用法在C中很常见,但在Go中实现这一点的惯用方法是返回更改后的值。我在命令行选项解析器(foo=bar)中使用它:将参数栏保存在给定的(string)变量中。虽然使用
&此处转到参数
,界面看起来有点干净,但我仍然不确定支持什么。谢谢你的反馈!Gustavo,从顶部开始的第三个图形有点误导。
的值更改为
World
,因此现在应该有两个
World
值。我知道,由于它们是字符串常量,它们将有效地共享相同的内存空间,但这比IMHO更深一层。图表显示了实际发生的情况,因此它比破坏现实的图表更有指导意义。内存中确实有一个由两个字符串变量指向的
“世界”
。为了提高清晰度,我重新命名了
s/Value/Data/
的值更改为
World
,因此现在应该有两个
World
值。我知道,由于它们是字符串常量,它们将有效地共享相同的内存空间,但这比IMHO更深一层。图表显示了实际发生的情况,因此它比破坏现实的图表更有指导意义。内存中确实有一个由两个字符串变量指向的
“世界”
。我重命名了
s/Value/Data/
以提高清晰度。