go语言渐入佳境[14]-指针-创新互联
变量的地址
1 2
| a :=10 fmt.Printf("a变量的地址为:%#X\n",&a)//a变量的地址为:0XC420092008
|
指针的声明
空指针
1 2 3
| if p==nil{ fmt.Println("p为空指针") }
|
通过指针获取值
1 2
| p = &a fmt.Printf("p的类型为%T, p的值为:%v,p指向的int的值为:%v,a的值为:%d\n",p,p,*p,a)
|
通过指针修改值
1 2
| *p = 99 fmt.Printf("p的类型为%T, p的值为:%v,p指向的int的值为:%v,a的值为:%d\n",p,p,*p,a)
|
完整例子1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| package main
import "fmt"
func main(){
//变量的地址 a :=10 fmt.Printf("a变量的地址为:%#X\n",&a)
//声明 var p *int
//空指针 if p==nil{ fmt.Println("p为空指针") }
//通过指针获取值 p = &a fmt.Printf("p的类型为%T, p的值为:%v,p指向的int的值为:%v,a的值为:%d\n",p,p,*p,a)
//通过指针修改值 *p = 99 fmt.Printf("p的类型为%T, p的值为:%v,p指向的int的值为:%v,a的值为:%d\n",p,p,*p,a)
}
|
指针作为函数参数
指针作为函数参数,修改原来的值:
在曲阳等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供
网站建设、网站设计 网站设计制作按需开发网站,公司网站建设,企业网站建设,
成都品牌网站建设,
成都全网营销,
成都外贸网站制作,曲阳网站建设费用合理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package main
import "fmt"
func main() { a := 10 fmt.Printf("1、变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//10
b := &a change(b) fmt.Printf("3、change函数调用之后,变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//20
change0(a) fmt.Printf("5、change0函数调用之后,变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//20
}
func change(a *int) { fmt.Printf("2、change函数内,变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//20 *a = 50 }
func change0(a int) { fmt.Printf("4、change0函数内,变量a的内存地址是:%p ,值为:%v \n\n", &a, a)//20 a = 90 }
|
切片类型指针作为函数参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| package main
import "fmt"
func main() { a := []int{1, 2, 3, 4} fmt.Printf("1、变量a的内存地址是:%p ,值为:%v \n\n", &a, a)
modify(&a) fmt.Printf("3、调用modify函数后,变量a的内存地址是:%p ,值为:%v \n\n", &a, a)
modify0(a) fmt.Printf("5、调用modify0函数后,变量a的内存地址是:%p ,值为:%v \n", &a, a) }
func modify(arr *[]int) { fmt.Printf("2、modify函数中参数a的内存地址是:%p ,值为:%v \n", &arr, arr) (*arr)[0] = 250 }
func modify0(arr []int) { fmt.Printf("4、modify0函数中参数a的内存地址是:%p ,值为:%v \n", &arr, arr) arr[0] = 99 }
|
指针作为函数参数例子2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| package main
import "fmt"
func main() { //定义两个局部变量 a, b := 100, 200
// 返回值的写法实现数据交换 a, b = swap0(a, b) fmt.Println("第一次交换后:" , a, b)
// 使用指针实现交换 swap(&a, &b) fmt.Println("第二次交换后:" , a, b) }
//具有返回值的惯用写法,实现两个数据的交换 func swap0(x, y int) (int, int) { return y, x }
//使用指针作为参数的写法 func swap(x, y *int) { *x, *y = *y, *x }
|
指针数组
数组,数组中的元素存储的都是指针。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package main
import "fmt"
const COUNT int = 4
func main() { a := [COUNT]string{"abc", "ABC", "123", "一二三"} //查看数组的指针的类型和值 fmt.Printf("%T , %v \n", &a, &a)
//定义指针数组 var ptr [COUNT]*string fmt.Printf("%T , %v \n", ptr, ptr)
for i := 0; i < COUNT; i++ { // 将数组中每个元素的地址赋值给指针数组的每个元素 ptr[i] = &a[i] } fmt.Printf("%T , %v \n", ptr, ptr)
fmt.Println(ptr[0])
// 根据指针数组元素的每个地址获取该地址所指向的元素的真实数值 for i:=0; i fmt.Println(*ptr[i]) }
for _,value :=range ptr { fmt.Println(*value) } }
|
多级指针
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| package main import "fmt"
func main() { var a int var ptr *int var pptr **int
a = 123
// 为指针赋值 ptr = &a fmt.Println("ptr:" , ptr)
//为pptr赋值 pptr = &ptr fmt.Println("pptr" , pptr)
//获取指针对应的值 fmt.Printf("变量 a = %d \n" , a) fmt.Printf("指针变量 *ptr = %d \n" , *ptr) fmt.Printf("指向到指针的变量 **pptr = %d \n" ,**pptr) }
|
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:go语言渐入佳境[14]-指针-创新互联
转载源于:
http://scyanting.com/article/jcsss.html