|
发表于 2014-7-1 16:58:17
|
显示全部楼层
写了一下,看注释- #include <iostream>
- using namespace std;
- int main()
- {
- int a[2][3] = { {1,2,3}, {4,5,6} };
- int (*p)[3] = a;
- int i,j;
- for (i = 0; i < 2; ++i)
- {
- for (j = 0; j < 3; ++j)
- {
- printf("a[%d][%d]=%d,0x%p\t" , i,j,a[i][j],&a[i][j]);
- }
- printf("\n");
- }
- printf("\n*******************************************\n");
- for (i=0;i<3;i++)
- {
- printf("(*p)[%d]=%d,0x%p\t" , i,(*p)[i],&((*p)[i]) );
- }
- printf("\np的值 0x%p\n",p);
- p++;
- printf("\np的值 0x%p\n",p);//看下内存的跨越值,为0xC 即 12,p指向的是3个整形组成的数组,12个字节
- printf("\n*******************************************\n");
- //理解这段打印结果,差不多就理解二维数组了
- int* pp = (int*)a;
- for (i=0;i<6;i++)
- {
- printf("%d,",*pp);
- pp++;
- }
-
- printf("\n*******************************************\n");
- for (i = 0; i < 2; ++i)
- {
- for (j = 0; j < 3; ++j)
- {
- cout << *(*(p + i) + j) << endl; //一直只知道这么写,却一直没想通为什么,求详细的解答。
- }
- }
- return 0;
- }
复制代码 |
|