tips: *號(hào),可以指向指針類型內(nèi)存地址上的值,號(hào),可以獲取值類型的內(nèi)存地址
創(chuàng)新互聯(lián)建站主營平橋網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,App定制開發(fā),平橋h5成都小程序開發(fā)搭建,平橋網(wǎng)站營銷推廣歡迎平橋等地區(qū)企業(yè)咨詢
每一個(gè)變量都有內(nèi)存地址,可以通過變量來操作內(nèi)存地址中的值,即內(nèi)存的大小
go語言中獲取變量的內(nèi)存地址方法:通過 符號(hào)可以獲取變量的地址
定義:普通變量存儲(chǔ)的是對(duì)應(yīng)類型的值,這些類型就叫值類型
變量b,在內(nèi)存中的地址為:0x1040a124,在這個(gè)內(nèi)存地址上存儲(chǔ)的值為:156
定義:指針類型的變量存儲(chǔ)的是?個(gè)地址,所以?叫指針類型或引?類型
b 是值類型,它指向的是內(nèi)存地址上的值
a是指針類型,它指向的是b的內(nèi)存地址
指針類型定義,語法: var 變量名 *類型
指針類型在定義完成后,默認(rèn)為空地址,即空指針(nil)
在定義好指針變量后,可以通過***** 符號(hào)可以獲取指針變量指向的變量
在這里的 *a 等價(jià)于 b,通過修改 *a ,最終修改的是值類型b的值
這里a,d是值類型,b,c是指針類型
d就相當(dāng)于把a(bǔ)內(nèi)存地址上值,在內(nèi)存中從新開辟了一塊空間存儲(chǔ),d和a互不影響
b,c相當(dāng)于指向了a的內(nèi)存地址,當(dāng)使用*號(hào)引用出內(nèi)存地址上的變量上,修改值得,a的值也會(huì)跟著改變
可以,不過x = y;錯(cuò)了是x=y;
int *x;int y; x=y;((指針)x = (取地址符)變量(y) 得到變量的地址 (x指向y的內(nèi)存地址))
int *x;int *y; x=y;(針與指針復(fù)制兩個(gè)指針都指向同一內(nèi)存地址x,y都未初始化危險(xiǎn) 在前面加上一句
int a; y=a進(jìn)行初始化化)
1. 定義指針變量的一般形式如下:
類型名*指針變量名1,*指針變量名2,... *指針變量名n ;
2. 空指針
空指針是一個(gè)特殊的指針,它的值是0,C語言中用符號(hào)常量NULL(在stdio.h中定義)表示這個(gè)空值,并保證這個(gè)值不會(huì)是任何變量的地址??罩羔槍?duì)任何指針類型賦值都是合法的。一個(gè)指針變量具有空指針值表示當(dāng)前它沒有指向任何有意義的東西。
3. void指針
(void *)類型的指針叫通用指針,可以指向任何的變量,C語言允許直接把任何變量的地址作為指針賦給通用指針。但是有一點(diǎn)需要注意void*不能指向由const修飾的變量,eg const int test; void * ptv; ptv = test;第三句是非法的,只有將ptv申明為const void * ptv;上述第三句(ptv = test),才是合法的.
當(dāng)需要使用通用指針?biāo)傅臄?shù)據(jù)參加運(yùn)算時(shí),需要寫出類型強(qiáng)制轉(zhuǎn)換。如通用指針ptv 所指空間的數(shù)據(jù)是整型數(shù)據(jù),p是整型指針,用此式轉(zhuǎn)換:p=(int *)ptv ;
主要看優(yōu)先級(jí)別,-比++的優(yōu)先級(jí)別高,++p-num,因?yàn)?優(yōu)先級(jí)別高,所以先算p-num,然后num++,p++-num,先算p-num,然后p++
于c語言相同,go中也有指針和結(jié)構(gòu)體的概念。指針表示變量的內(nèi)存地址,結(jié)構(gòu)體用來存儲(chǔ)同一類型的數(shù)據(jù)。
定義一個(gè)指針變量,將變量a的地址賦給指針變量p。這樣,指針變量p也就指向了變量a所在的內(nèi)容空間。
new 函數(shù)返回一個(gè)指針變量
fmt.scan() 就是傳入一個(gè)指針變量。
兩種方法都可以使用。
以上簡要介紹了go語言中的指針和結(jié)構(gòu)體。
對(duì)指針變量的定義包括三個(gè)內(nèi)容:
(1)
指針類型說明,即定義變量為一個(gè)指針變量;
(2)
指針變量名;
(3)
變量值(指針)所指向的變量的數(shù)據(jù)類型。
其一般形式為:
類型說明符
*變量名;
其中,*表示這是一個(gè)指針變量,變量名即為定義的指針變量名,類型說明符表示本指針變量所指向的變量的數(shù)據(jù)類型。
例如:
int
*p1;
表示p1是一個(gè)指針變量,它的值是某個(gè)整型變量的地址?;蛘哒fp1指向一個(gè)整型變量。至于p1究竟指向哪一個(gè)整型變量,應(yīng)由向p1賦予的地址來決定。
再如:
int
*p2;
/*p2是指向整型變量的指針變量*/
float
*p3;
/*p3是指向浮點(diǎn)變量的指針變量*/
char
*p4;
/*p4是指向字符變量的指針變量*/
應(yīng)該注意的是,一個(gè)指針變量只能指向同類型的變量,如P3
只能指向浮點(diǎn)變量,不能時(shí)而指向一個(gè)浮點(diǎn)變量,時(shí)而又指向一個(gè)字符變量。