指向指標的指標一顆*就有乙個位址 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 開闢備份空間 根據變換要求將元素一一賦值 因為這個方法並不...