int b[3][2], b是一个数组,b[0]是0行的首地址,b[1]是1行首地址,b[0]可以赋值给int*的指针,即b[i]是一维数组的首地址,b[i][j]访问的i行第j个元素
int *s=b[0]; 下面的代码可以遍历数组,输出每个元素的首地址
for (int i = 0; i < 6; i++)
{
cout << s << " ";
cout << *s++ << endl;
}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
cout << &b[i][j] << endl;
}
二维数组名不是个2级指针,int **p=b,无法编译,b的类型是int(*)[2] ,b是个指针,指向一个数组,b与b[0]不同,b[0]的类型是int* ,虽然b[0]也是0行的首地址
int (*ptr)[2] ; ptr=b; 下面的代码可以遍历数组元素
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 2; j++)
cout << ptr[i][j] << endl;
}
for (int i = 0; i < 3; i++) 每次移动ptr,是移动整行,前面移动s,就是移动一个元素的位置,s是int*,ptr是int(*)[2]
cout << ptr++ << endl; cout<<b[i]效果和cout<<ptr一样
int(*t)[3][2],t是指针,指向3行2列的数组,b是指向2个元素的数组的指针,t=b不能通过编译
1 int b[3][2] = { { 1, 2 }, { 2, 3 }, { 3, 4 } }; 2 int(*t)[3][2]; 3 t = &b; 4 int(*ptr)[2] = b; 5 for (int i = 0; i < 3; i++) 6 cout << ptr++ << endl; 7 8 int *s = b[0];// 9 cout << b[0] << " " << b[1]<<" " << b[2] << endl; 10 for (int i = 0; i < 3; i++) 11 { 12 cout << t[i] << " "; 13 cout << *t[i] << endl; 14 } 15 for (int i = 0; i < 6; i++) 16 { 17 cout << s << " "; 18 cout << *s++ << endl; 19 20 } 21 for (int i = 0; i < 3; i++) 22 { 23 for (int j = 0; j < 2; j++) 24 cout << ptr[i][j] << endl; 25 }
时间: 2024-11-26 08:57:10