小编Meg*_*ori的帖子

将字符串与指向字符串的指针作为函数参数传递时,时间复杂度有什么区别?

假设我有一个字符串 s。

 s := "helloworld"
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,如果 s 有 'n' 个字节,那么如果我将 s 传递给函数与将 &s 传递给函数然后访问字符串的第 i 个字节,则相对于 'n' 的时间复杂度是多少。

如果将 &s 传递给函数并访问字符串的第 i 个字节需要 O(1) 时间,那么当我将 s 传递给函数然后访问字符串的第 i 个字节时是否需要 O(n) 时间(因为整个字符串将被复制)?

我试过这个,发现复制一个字符串确实改变了指向它的指针。希望能更清楚地了解这一点。

func main() {
    str := "helloworld"
    fmt.Println("string pointer 1:", &str)
    printStringPointer(str)
}

func printStringPointer(s string) {
    fmt.Println("string pointer 2:", &s)
}
Run Code Online (Sandbox Code Playgroud)

输出:

string pointer 1: 0xc000010200
string pointer 2: 0xc000010210
Run Code Online (Sandbox Code Playgroud)

string pointers pass-by-value go

1
推荐指数
1
解决办法
82
查看次数

标签 统计

go ×1

pass-by-value ×1

pointers ×1

string ×1