4.5. 第 4 节:指针 -- 数组指针与指针数组

未匹配的标注
本文档最新版为 2023,旧版本可能放弃维护,推荐阅读最新版!

3. 数组指针

前面在讲解数组的时候,我们用数组作为函数参数,但是数组作为参数进行传递是值传递,如果想引用传递,可以使用数组指针。具体使用方式如下:

p> <pre><code class=package main import "fmt" func main0501() { arr := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} //定义指针 指向数组 数组指针 //自动推导类型创建数组指针 //p := &arr //指针和数组建立关系 var p *[10]int p = &arr //fmt.Printf("%T\n", p) //通过指针间接操作数组 //fmt.Println(len(p)) for i := 0; i < len(p); i++ { fmt.Println(p[i]) } //(*数组指针变量)[下标]=值 //(*p)[1] = 222 //数组指针可以直接操作数组元素 //p[1] = 222//ok //fmt.Println(*p) } func main0502() { arr := [5]int{1, 2, 3, 4, 5} //指针变量和要存储的数据类型要相同 //p1和p2在内存中指向相同的地址 但是p1和p2的类型不同 一个是指向整个数组 一个是指向数组的元素 p1 := &arr //p2 := &arr[0] //fmt.Printf("%p\n", p1) //fmt.Printf("%p\n", p2) // //fmt.Printf("%T\n", p1) //fmt.Printf("%T\n", p2) for i := 0; i < len(p1); i++ { fmt.Println(p1[i]) } } //将数组指针作为函数参数 //func test2(p *[5]int) { // // //通过指针间接操作数组 // p[2] = 123 // //} //将数组指针作为函数参数 func BubbleSort(arr *[10]int) { for i := 0; i < len(arr)-1; i++ { for j := 0; j < len(arr)-1-i; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } } func main() { arr := [10]int{9, 1, 5, 6, 8, 4, 10, 7, 2, 3} //p := &arr //地址传递 //test2(p) BubbleSort(&arr) fmt.Println(arr) }

4. 指针数组 -- 不容易懂重点

上一小节,讲解到的是数组指针,也就是让一个指针指向数组 ,然后可以通过该指针来操作数组。还有一个概念叫指针数组,这两个概念很容混淆,指针数组指的是一个数组中存储的都是指针(也就是地址)。也就是一个存储了地址的数组。\
下面通过一个案例,看一下指针数组的应用\

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~