背景:int *p;int a[10][10];如何讓一維指針p指向a[10][10]開辟的內存空間?
正確的方法:
1.開始我用的笨方法是另外開辟一個內存空間int*p=new int [100];
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
*p=a[i][j];
p++;
}
}
p=p-100;
這樣就另外開辟了100的內存空間,並讓p指向了,這個內存區間的起始地址
2.直接p=&a[0][0];
3.p=a[0];這樣也行,確實讓人費解
4.p=(int*)a;
錯誤的方法:
p=a;//二維數組的數組名,表示一個指向列值個元素的一維數組的指針變量
拓展方法:
從上面可以看出,這些指針本質上都是指向一種類型(整型的指針),他們之間的轉換無非是強制轉換,這樣都不會有問題,結論就是同類型指針同維數指針之間強制轉換都不會有問題,
下面的方法:
int(*pa)[10]=null;
int **pab=(int**)pa;//這里編譯沒問題,運行有問題
int *p=(int*)pa;//這樣編譯沒問題,運行也沒問題,相當於二維轉一維
p=(int *)pab;//編譯沒問題,運行沒問題,二維轉一維
從上面可以看出,二維指針之間強制轉換會出現不可知的問題,而二維強制轉一維都不會有問題!
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。