指向指標的指標,指標的運算,指標與多維陣列的關係

2021-07-16 09:14:48 字數 3999 閱讀 6507

指向指標的指標一顆*就有乙個位址  int *p=&a     int **p1=&p (變數的位址上的數值的位址)     

int a=10;

int *p=&a;

int **p1=&p                          (&+變數名而不是指標 )  (巢狀的)     //列印得到的值是*p的值,列印得到的三個值都一樣

printf("a=%p\n",&a);

printf("*p=%p\n",p);              p是位址    *p是取位址上的值

printf("**p1=%p\n",&p);&p是位址(這是兩個位址)     一顆*就有乙個位址

列印得到的位址都不一樣

引數傳遞傳遞的都是位址(實參),,形參可以用來定義變數

定義指標的型別應該和變數的型別一致

個人總結:三個量 乙個變數a ,乙個指標,乙個指向指標的指標

int *p=&a;  指標p原本有乙個位址,同時又取到了a的位址還有值,儲存在自己原本的位址中

int **p1=&p;  同樣的指向指標p的指標*p1原本也有乙個位址,獲取得到指標p的位址,但是沒有得到變數的位址,

卻可以通過p的位址獲取變數a的值

指標的運算

1:指標變數的賦值運算

與陣列的關係,將首位址賦值給指標

*p++  對應陣列的下標變化

結論:   *(p+n)=a[n];

陣列的下標取值     指標的位址取值

行指標  a代表第0行首位址  a+1代表第1行首位址    a+i

列指標  a[0]  a[0]+1  a[0]+2  a[0]+j

a[i][j]  表示的是 第i+1行 第j+1列 上對應的數值

總結;二維陣列與指標的關係

printf("%d\n",*(a[i]+j));

一維陣列中    a[i]=*(a+i)

公式  a[i][j]=a[i]+j=*(*(a+i)+j);

這些公式都是在二維陣列中運用的,不單獨使用

//指標與一維陣列的關係

#include

void main();

int i;

int *p;

p=a;  //p=&a[0]

for( i=0;i<5;i++)

getchar();

}#include

void main()

else

getchar();

}//指標與二維陣列的關係

#include

void main(),,};

for(i=0;i<3;i++)

}getchar();

}

推理:行指標  a代表第0行首位址  a+1代表第1行首位址    a+i    往下走   可以寫成a[i]

列指標  a[0]  a[0]+1  a[0]+2  a[0]+j   往右走  

然後結合一起得到      a[i]+j  也可以寫成   *(*(a+i)+j)     執行發現等價於a[i][j]

//二維陣列與指標的關係

//列印得到的是位址 a[2]是乙個陣列   a+2=a[2]

#includevoid main(),,};

printf("%d,%d\n",&a[2],a+2); //得到的是9這個元素的位址(三行一列)

printf("%d,%d\n",a[2],*(a+2)); //得到的是9這個元素的位址(三行一列)

printf("%d,%d\n",*a[2],*(*(a+2)+0)); //9,9 得到9這個元素 *後面跟的一定是位址,得到的結果是乙個值

printf("%d,%d\n",a[1],a+1); //得到的是5這個元素的位址(二行一列)

printf("%d,%d\n",&a[1][0],*(a+1)+0); //得到的是5這個元素的位址(二行一列)

printf("%d,%d\n",a[1][0],*(*(a+1)+0)); //5,5 得到5這個元素 確定了具體位置,所以得到的結果是乙個值

printf("%d,%d\n",&a[0],&a[0][0]); //得到的是1這個元素的位址(一行一列)

printf("%d,%d\n",a[0],*(a+0)); //得到的是1這個元素的位址(一行一列)

for(i=0;i<3;i++)

}getchar();

}

課堂小遊戲

//小外掛程式

#include

#include

void main()

getchar();

}#include

_declspec(dllexport)  abc()

//建立兩個專案,分別放入,生成解決方案,並且用上打針工具,注入外掛程式和執行函式,執行即可;

指標的引用與指向指標的指標

一般來說,為函式傳入乙個引數,如果希望函式執行完成後對引數的改動依然保留,那麼有兩種方式 傳入乙個引用 傳入乙個指標 傳入引用的方式很好理解,就是相當於將變數本身傳入,針對變數所進行的一切修改都是直接對變數本身的修改。傳入指標則不然,傳入指標後進行的修改,實際上是對指標指向的位址的內容進行修改,而不...

指向指標的指標

理解二級指標,關鍵是理解指標的儲存方式和意義。這裡以指向int型指標的指標為例,梳理一下二級指標在記憶體分配中 的奧妙.include using namespace std int main int p a int point p cout a a endl p p endl p p endl p...

指向指標的指標

這幾天我下意識地琢磨到底 錯了,今天猛然明白了他的想法,其實這個技術點我早已掌握,只是當時對問題未深入思考,把握得較模糊,一時沒洞察他的思路,疏忽了。問題大概是這樣的 寫乙個函式,將乙個二維陣列作乙個變換。void rotate array 開闢備份空間 根據變換要求將元素一一賦值 因為這個方法並不...