指標的一些知識

2021-07-15 13:11:16 字數 2540 閱讀 4708

最近在複習c語言,要找工作啦,發現寫下來總結下,有助於掌握和理解知識,當然裡面有很多東西是網上找到,自己整理了下而已。

1.指標陣列與陣列指標

首先要明白優先順序順序:優先順序:()>>*

先來看指標陣列,定義int *p[10],優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1時,則p指向下乙個陣列元素,可以這樣*p=a; 這裡*p表示指標陣列第乙個元素的值,a的首位址的值。

指標陣列是多個指標變數,以陣列形式存在記憶體當中,占有多個指標的儲存空間。

再來看陣列指標,定義 int (*p)[10],()優先順序高,*與p先結合成為乙個指標,即首先p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是10,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a;        //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]

p++;       //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

常見的難點

int main()

inta[4]=;

int*ptr1=(int *)(&a+1);//指向a陣列後面的記憶體單元,&a+1表示向後移16個儲存單元

int*ptr2=(int *)((int)a+1);//表示a的儲存單元的位址增加乙個位元組

printf("%x,%x",ptr1[-1],*ptr2);//ptr1[-1]其實指向的是a陣列的最後乙個單元,*ptr1則表示a陣列的位址後移乙個位元組之後的4個連續儲存單元所儲存的值

return 0;

ptr1:將&a+1 的值強制轉換成int*型別,賦值給int* 型別的變數ptr,ptr1 肯定指到陣列a 的下乙個int 型別資料了。ptr1[-1]被解析成*(ptr1-1),即ptr1 往後退4 個byte。所以其值為0x4。

ptr2:按照上面的講解,(int)a+1 的值是元素a[0]的第二個位元組的位址。然後把這個位址強制轉換成int*型別的值賦給ptr2,也就是說*ptr2 的值應該為元素a[0]的第二個位元組開始的連續4 個byte 的內容。

2指標函式與函式指標

指標函式:

例:int*f(x,y);

它是帶指標的函式,本質是乙個函式。

首先它是乙個函式,只不過這個函式的返回值是乙個位址值,經常使用在返回陣列的某一元素位址上。函式返回值必須用同型別的指標變數來接受,也就是說,指標函式一定有函式返回值,而且,在主調函式中,函式返回值必須賦給同型別的指標變數。

例如:float *fun();

float *p;

p = fun(a);

函式指標:

函式指標是指向函式的指標變數,即本質是乙個指標變數

例:int(*f) (int x); /* 宣告乙個函式指標*/

f=func; /* 將func函式的首位址賦給指標f*/

指向函式的指標包含了函式的位址,其功能是通過它來呼叫函式。

舉個例子:

void (*p1)(); 定義乙個函式指標,同樣也是根據優先順序順序,先是乙個指標,再是乙個函式。

void love(), hate(); 定義了兩個函式

main()

3指標與引用

1引用的基本問題:一般變數的引用和指標變數的引用

一般:

例int &b=a;表示b被宣告為a的引用,對比賦值就是對a賦值注:引用使用時必須初始化,例如:int &c; 是錯誤的

指標變數的引用:

例:intb=10;

int a=1;

int *p=&a;// 宣告整型的指標變數p指向a.

int* &pa=p;// 宣告pa為指標變數p的引用。

當然還有引數引用常量引用就不再細說了

指標和引用的區別:

no1:引用在建立的同事必須初始化,而指標在定義的時候可以不初始化,但指標在後面必須初始化。否則指標會成為野指標。

n02:引用一旦被初始化,就不能被另外乙個物件引用,而指標是可以的。

no3:引用不會指向空值,使用引用之前不用測試他的合法性,而指標需要。

no4:由於不存在空值引用,引用也不會在初始化後指向另乙個物件,因此比指標安全。

關於指標的一些知識

要說指標 位址 筆者認為必須從記憶體開始說起,也就是儲存單元的位址,他是一種編號,相當於一排的座位,位址 座位編號 但是要談起 指標 可不像平時書上說的那樣,指標 位址,這種說法已經被廣大的 語言愛好者給抨擊了,那指標相當於什麼?可能你要這麼問,形象的說指標就相當於乙個箱子,箱子裡面放了乙個椅子,椅...

10 12關於指標的一些知識

1.指標的普通用法 include using namespace std int main 2.關於指標的運算。include using namespace std const intmax 3 int main int ptr 指標中的陣列位址 ptr var for inti 0 i max...

引用和指標的一些知識

引用並非物件,相反的,它只是為乙個已經存在的物件所起的另外乙個名字。引用即別名 int val 1024 int refval val refval指向val 是val的乙個別名 定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和它的初始值物...