指针与二维数组

#include <iostream>
using namespace std;

int main()
{
    /*
    ** 脑海里要牢记:“*”是取地址内容的操作符,后面的值必须是个地址
** int *p[2] ** 一维数组,数组大小为2,数组的元素是int的指针 ** 即数组中放的是int *的数据
*/ int *p[2]; int a[3] = { 11, 21, 31 }; int b[4] = { 41, 51, 61, 71 }; //此时数组大小不限制 /* ** 注意不能使用p[2],否则数组越界 ** 如果拿二维数组来理解int *p[2] ** 横向数组大小没有限制,纵向则有 */ p[0] = a; p[1] = b; for ( int i = 0; i < 3; ++i ) { cout << *(*(p+0) + i) << endl; //0表示p[0] } for ( int i = 0; i < 4; ++i ) { cout << *(*(p+1) + i) << endl; //1表示p[1] } cout << "****************" << endl; /* ** 与二维数组的关系 ** 横向数组大小没有限制,纵向则有 */ int c[2][3] = { {11,21,31}, {41,51,61} }; p[0] = c[0]; p[1] = c[1]; for ( int i = 0; i < 2; ++i ) { for ( int j = 0; j < 3; ++j ) { cout << *(*(p+i)+j) << " " << c[i][j] << endl; } } return 0; }

////////////////////////////////////////////////////////////////////////////////////////////////

没有分割线,似乎不好……

////////////////////////////////////////////////////////////////////////////////////////////////

#include <iostream>
using namespace std;

int main()
{
    /*
    ** int (*p)[2]
    ** 因为q前面有*,所以q需是“地址”
    ** 下面的二维数组c,3可为任意数
    ** 横向大小被限制,纵向大小无限制
    */
    int (*p)[2];
    int c[3][2] = { {11,21}, {31,41}, {51,61} };
    p = c;

    for ( int i = 0; i < 3; ++i )
    {
        for ( int j = 0; j < 2; ++j )
        {
            cout << *(*(p+i)+j) << "  " << c[i][j] << endl;
        }
    }

    return 0;
}

1.这样理解挺华丽丽的

int ** p <==> int p[ x ][ y ];
int *p[ 2 ] <==> int p[ 2 ][ x ];
int ( *p )[ 2 ] <==> int p[ x ][ 2 ];

2.参考资料:http://www.cnblogs.com/carekee/articles/1948326.html

posted @ 2012-05-22 21:26  木愚  阅读(245)  评论(0编辑  收藏  举报