4.2指標的引入
*符號把乙個識別符號宣告為指標:
vector*pvec; pvec是乙個執行
vector
型別物件的指標
int *ip1,*ip2; ip1和
ip2分別是指向
int型別物件的指標
乙個有效的指標必然是以下三種狀態:
1.儲存乙個特定物件的位址;
2.只想某個物件後面的乙個物件;
3. 0值
注意:避免使用未初始化的指標,懸空指標,dangerous
!!簡單的指標操作:
#include #includeusing namespace std;
int main()
解引用操作生成左值,可用來修改指標所指物件的值。
指向指標的指標:
#include using namespace std;
int main()
;int *ip=ia; //ip points to
兩個指標減法操作的結果是ptrdiff_t
型的資料;
相減的兩個指標必須是指向同一型別的;
ptrdiff_t是一種機器相關的型別,在
cstddef
標頭檔案裡面定義,是
signed
型別的哦!!與
size_t
不大一樣,
size_t
是unsigned
型別的。
用指標遍歷陣列:
#include using namespace std;
int main()
; for(int *pbegin=arr,*pend=arr+array_size;pbegin!=pend;pbegin++)
cout<<*pbegin<<' ';
return 0;
}
pbegin是陣列的起始位置,而
pend
是陣列的超出末端位置,相當與
vector
的end
函式,我們不能對
pend
解引用,
c++允許
pend
與其他指標比較,但不允許解引用!!未定義的操作。
習題4.18
#include using namespace std;
int main()
; for(int *pbegin=arr,*pend=arr+array_size;pbegin!=pend;pbegin++)
return 0;
}
指標和const
限定符
c++強制要求指向
const
物件的指標也必須具有
const
特性;
const double *cptr;
將cptr
設定成指向
const
物件的指標,但是
cptr
的值可以改變,只是不可以通過
cptr
來改變const
物件,~~~~~~cptr
一經定義,就不允許修改其所指物件的值!!!
不能保證指向
const
的指標(
自以為指向
const
的指標)所指物件的值一定不可修改!!!
const指標
本身的值不能修改;
int errnumb=0;
int *const curerr=&errrnumb; //cureer is a const pointer!!!!
指向const
物件的const
指標
const double pi=3.14159;
const double *const pi_ptr=π //pi_ptr首先是乙個
const
指標,指向
double
型的const
物件;
習題4.20
int i=-1;
const int ic=i;
const int *pic=
int *const cpi= //錯誤!cpi是指向int型的const指標,而ic是const int型的!!
//const和int const都不可以,好嚴格的說~~#
const int *const cpic= //都是const int
4 2指標的引入
1.建議避免使用指標和陣列.2.指標的定義和初始化 string ps 3.連續宣告多個指標容易導致混淆 string ps1,ps2 4.避免使用未初始化的指標 如果必須分開指標和他所指的物件,可以將指標初始化為0 還可以使用null int pi null null不是在命名空間std中定義的 ...
go學習筆記 2指標
go 語言中指標是很容易學習的,go 語言中使用指標可以更簡單的執行一些任務。接下來讓我們來一步步學習 go 語言指標。我們都知道,變數是一種使用方便的佔位符,用於引用計算機記憶體位址。go 語言的取位址符是 放到乙個變數前使用就會返回相應變數的記憶體位址。執行以上 輸出結果為 現在我們已經了解了什...
Golang學習筆記 12 指標
var ip int 指向整型 var fp float32 指向浮點型 指標使用流程 定義指標變數。為指標變數賦值。訪問指標變數中指向位址的值。例項package main import fmt func main 當乙個指標被定義後沒有分配到任何變數時,它的值為 nil。nil 指標也稱為空指標...