C++ 指针再浅谈
指针概念
指针是一个变量,它存储的是内存里面的一个地址。
数组和指针
代码 1:
int mInt[2][2][3] =
{
{
{1, 2, 3},
{4, 5, 6}
},
{
{7, 8, 9},
{10, 11, 12}
}
};
for (int i = 0; i < 12; ++ i)
{
cout << “按顺序输出数组中的内容” << " ";
}
cout << endl;
看到这个问题或许会想到用i 来判断数组的每一维的内容,当然这种方式也是可以的。不过还有另一种方式,通过数组和指针来解决。
上面的问题我们先放置一下,来看下数组和指针的关系,了解后面的介绍以后,上面的问题也会迎刃而解。
数组名是数组的首地址,同样也是数组第一个元素的内存地址。
代码 2:
int mInt[] = {1, 2, 3, 4, 5, 6, 7};
cout << mInt << endl;
cout << &mInt[0] << endl;
通过输出内容我们可以看到,上面的结论是正确的。
于是我么可以把代码 2
的内容进行整理下,把数组的内容按照顺序输出。数组的定义:是把相同数据类型的数据放置在一起的一个集合, 他们在内存中是一个连续的。于是我们可以把数组的首地址按照一定的偏移量来获取到下一块内存中数据
代码 3:
int mInt[] = {1, 2, 3, 4, 5, 6, 7};
for (auto i = 0; i < sizeof(sizeof(mInt) / sizeof(int)); ++ i)
{
cout << *(mInt + i) << " ";
}
cout << endl;
注意:在上面代码输出内容中,不能写成*mInt + i
这样就是变成数组第一个值加上 i 的值作为输出内容了
使用一维数组我们用到指针,同样作用到二维数组也是可以的。
代码 4:
int mInt[][2] =
{
{1, 2},
{3, 4}
};
for (auto i = 0; i < 4; ++ i)
{
cout << *(*mInt + i) << " ";
}
cout << endl;
在这段代码的输出中 *(*mInt + i)
括号内的 *mInt
指向的是mInt[0][0]
的内存所在的地址。
看完这些例子,代码 1的问题也就有答案了,我们只需要获取到第三维数组元素的所在的内存地址按照偏移量,就可以输出数组中的元素了。
int mInt[2][2][3] =
{
{
{1, 2, 3},
{4, 5, 6}
},
{
{7, 8, 9},
{10, 11, 12}
}
};
for (int i = 0; i < 12; ++ i)
{
cout << *(**mInt + i) << " ";
}
cout << endl;
数组指针 与 指针数组
数组指针
未完待续…