#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
转载于:https://www.cnblogs.com/c007136/archive/2012/05/22/2513883.html