读书人

一个c++指针有关问题

发布时间: 2012-03-09 21:42:52 作者: rapoo

一个c++指针问题
void output(int *p)
{
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
//cout << "i=" << i << "j=" << j << endl;
cout << *((p+i)+j) << " ";
}
}
cout << endl;
}


void main()
{
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
output(&a[0][0]);
}

为什么输出后是:1,3,5,7,3,5,7,9,5,7,9,11;


[解决办法]

C/C++ code
当数组作为参数,就退化成了指针,所以你要自己计算它的维数#include "iostream"using namespace std;void output(int *p) {     for(int i=0;i <3;i++)     {         for(int j=0;j <4;j++)         {             cout  << *((p+i * 4)+j)  << " ";  // 这里        }     }     cout  << endl; } void main() {     int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};     output(&a[0][0]); }
[解决办法]
你把这个二维数组按一维的形式排出来就是
1 3 5 7 9 11 13 15 17 19 21 23
在这个函数里
void output(int *p)
{
for(int i=0;i <3;i++)
{
for(int j=0;j <4;j++)
{
//cout < < "i=" < < i < < "j=" < < j < < endl;
cout<< *((p+i)+j)<< " ";
}
}
cout<<endl;
}
p = 0 (意指p指向第0个元素,并非真的为0)
第一次外循环 ,i=0,p=0,因此p+i+j = j,所以cout语句等价于 cout<<*([0])到cout<<([3]),输出1 3 5 7
第二次外循环,i =1,p=0,因此p+i+j = j+1,所以输出语句等价于 cout<<*([1])到 cout<<([4]), 输出 3 5 7 9
第三次外循环是一样的道理,关键是多维数组在内存里还是以线性的方式存储的,它通过一个映射函数进行[][]到[]的转换
以上是小弟的拙见,请斧正。

读书人网 >C++

热点推荐