從JAVA轉C++,開始對指標的理解,講講自己對指標的理解,指標也是一個變數類型而已,存的就是是某個對象或變數的地址,還是先上代碼吧:代碼最直接了:
#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){int i = 100 ;//賦值方法一int *p =&i;//可以這樣定義指標並且賦值//賦值方法二int *pt; pt = &i;
// *pt = &i 這樣定義不行 ,賦值方法一那樣定義就行 //下面是測試結果printf("i: %d\n",i);/*//就是指向的某個變數的記憶體位址 可以看出 p = &i 跟上面的賦值賦值有點不同,開始我 一直 以為賦值方法是*p=&i;那麼*p=&i應該也可以的; 也可能我理解能力差的緣故,*/printf("p: %d\n",p);printf("&i: %d\n",&i);printf("*p: %d\n",*p);//就是該記憶體位址的內容或值printf("pt:%d \n",pt);printf("*pt:%d \n",*pt);/*指標的記憶體位址,說明指標也有自己的記憶體位址,指標就是一個類型*/printf("&pt:%d \n",&pt);printf("&p:%d\n ",&p);return 0;
上面就是我個人對指標的理解。
使用指標:
int * myPointer = new int ;
在此情況下,指標指向一個整數值的地址。為訪問這個值,需要對這個指標解除引用。如下代碼
*myPointer = 8;
int *myPoniter = new int ;//動態分配記憶體printf("&myPoniter:%d\n ",&myPoniter);printf("*myPoniter:%d\n ",*myPoniter);*myPoniter =8;printf("&myPoniter:%d\n ",&myPoniter);printf("*myPoniter 8:%d\n ",*myPoniter);delete myPoniter;//釋放記憶體
這裡並沒有改變指標的記憶體位址,指改變該記憶體位址的內容;
下面代碼是對數組指標的理解;
const size_t size = 5;int int_arr[size] = {0,1,2,3,4};int *b = int_arr;int *e = int_arr+size;printf("b:%d\n",b);printf("b++:%d\n",++b);printf("int_arr0:%d\n",&int_arr[0]);//b = &&int_arr[0]printf("int_arr1:%d\n",&int_arr[1]);//++b=&int_arr[1]printf("e:%d\n",e);for (int *pbegin = int_arr,*end =int_arr+ size;pbegin != end;++pbegin){std::cout<<*pbegin<<endl;}