A,指針的定義初始化和使用數組
定義:指針
type *name; //int *p;對象
初始化:ip
type *name = &obj //string *name = str1;string
避免使用未初始化的指針,若是必須分開指針和其指向的對象,應將指針初始化爲0;編譯
初始化和賦值操做的約束ast
對指針的初始化只能使用一下四種類型的值引用
1,0值常量表達式,例如在編譯時可得到0值的整型const對象或者字面值常量0error
const int c_ival = 0;co
int *pi = c_ival;
int *pi2 = 0;
2,類型匹配對象的地址
3,另外一對象以後的下一地址
4,同一類型的另外一個有效指針
使用:&引用操做符 *解引用操做符
string s("hello world");
string *sp = &s;
cout << *sp
B,指針和引用的比較
指針和引用均可以間接訪問另外一個值,但引用老是指向某個對象,引用沒有初始化是錯誤的。對引用的修改的是該引用所關聯的對象的值,而並非使引用和另外一個值相關聯。引用一初始化,就始終指向同一個特定的對象。
int ival = 1024 , ival2 = 2048;
int *pi = &ival,*pi2 = &ival2;
pi = pi2 //如今pi指向ival2了
int ival = 1024, ival2 = 2048;
int &ri = ival,&ri2 = ival2;
ri = ri2 // ival的值和ival2的值相等了
C:指針和數組的關係
在表達式中使用數組名是,該名字會自動轉換爲指向數組的第一個元素的指針
int ia[] = {0,2,4,6,8};
int *ip = ia //ip 指向 ia[0]
1,指針的算術操做
指針加上或者減去一個整型數值n等效於得到一個新的指針,該新指針指向指針原來指向的元素以後或以前的第n個元素。
int ia[] = {0,2,4,6,8};
ip = ia;
int *ip2 = ip+4; //ia[4]
int *ip3 = ip2-2; //ia[2]
int *ip4 = ip3+10 //error
ip3-ip2 //-2
2,解引用和指針算術操做之間的相互做用
int last = *(ia + 4); //ok,last equel the value of ia[4];