tips: *号,可以指向指针类型内存地址上的值,号,可以获取值类型的内存地址
创新互联建站主营平桥网站建设的网络公司,主营网站建设方案,App定制开发,平桥h5成都小程序开发搭建,平桥网站营销推广欢迎平桥等地区企业咨询
每一个变量都有内存地址,可以通过变量来操作内存地址中的值,即内存的大小
go语言中获取变量的内存地址方法:通过 符号可以获取变量的地址
定义:普通变量存储的是对应类型的值,这些类型就叫值类型
变量b,在内存中的地址为:0x1040a124,在这个内存地址上存储的值为:156
定义:指针类型的变量存储的是⼀个地址,所以⼜叫指针类型或引⽤类型
b 是值类型,它指向的是内存地址上的值
a是指针类型,它指向的是b的内存地址
指针类型定义,语法: var 变量名 *类型
指针类型在定义完成后,默认为空地址,即空指针(nil)
在定义好指针变量后,可以通过***** 符号可以获取指针变量指向的变量
在这里的 *a 等价于 b,通过修改 *a ,最终修改的是值类型b的值
这里a,d是值类型,b,c是指针类型
d就相当于把a内存地址上值,在内存中从新开辟了一块空间存储,d和a互不影响
b,c相当于指向了a的内存地址,当使用*号引用出内存地址上的变量上,修改值得,a的值也会跟着改变
可以,不过x = y;错了是x=y;
int *x;int y; x=y;((指针)x = (取地址符)变量(y) 得到变量的地址 (x指向y的内存地址))
int *x;int *y; x=y;(针与指针复制两个指针都指向同一内存地址x,y都未初始化危险 在前面加上一句
int a; y=a进行初始化化)
1. 定义指针变量的一般形式如下:
类型名*指针变量名1,*指针变量名2,... *指针变量名n ;
2. 空指针
空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
3. void指针
(void *)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。但是有一点需要注意void*不能指向由const修饰的变量,eg const int test; void * ptv; ptv = test;第三句是非法的,只有将ptv申明为const void * ptv;上述第三句(ptv = test),才是合法的.
当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整型数据,p是整型指针,用此式转换:p=(int *)ptv ;
主要看优先级别,-比++的优先级别高,++p-num,因为-优先级别高,所以先算p-num,然后num++,p++-num,先算p-num,然后p++
于c语言相同,go中也有指针和结构体的概念。指针表示变量的内存地址,结构体用来存储同一类型的数据。
定义一个指针变量,将变量a的地址赋给指针变量p。这样,指针变量p也就指向了变量a所在的内容空间。
new 函数返回一个指针变量
fmt.scan() 就是传入一个指针变量。
两种方法都可以使用。
以上简要介绍了go语言中的指针和结构体。
对指针变量的定义包括三个内容:
(1)
指针类型说明,即定义变量为一个指针变量;
(2)
指针变量名;
(3)
变量值(指针)所指向的变量的数据类型。
其一般形式为:
类型说明符
*变量名;
其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。
例如:
int
*p1;
表示p1是一个指针变量,它的值是某个整型变量的地址。或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。
再如:
int
*p2;
/*p2是指向整型变量的指针变量*/
float
*p3;
/*p3是指向浮点变量的指针变量*/
char
*p4;
/*p4是指向字符变量的指针变量*/
应该注意的是,一个指针变量只能指向同类型的变量,如P3
只能指向浮点变量,不能时而指向一个浮点变量,时而又指向一个字符变量。