您的位置:首页 > 编程语言 > C语言/C++

C++中的细节(数组指针)

2013-09-30 11:32 176 查看
        1. 数组指针

        //在win32上验证

        int ar[][4]={{1,2,3,4},{5,6,7,8}};

        cout<<*ar+1<<endl; //@1 return the local of point:0028FD74

        cout<<*(ar+1)<<endl; //@2 return the local of point:0028FD80, @1@2两种不同的写法相差字节为12,正好是4个整形的存储空间,也就是@2是5的存储地址

        cout<<*(*ar+1)<<endl;    //return 2, 验证了*arr为数组中{1,2,3,4}为数组的首地址

        cout<<*(*ar+4)<<endl;    //return 5, 验证了C++中存放数组的地址是一块连续的内存地址

        //然后接着验证

       cout<<arr<<endl;    //@3

       cout<<*arr<<endl;    //@4, 可以发现@3@4返回相同的地址

        //是不是清晰点了?所以也就有了下面的这个

        int **arr=new int[][2];    

        //这里必须注意,arr是个常量指针,不能修改的哦

        有了上面的知识,下面在一个二维数组中进行查找。这里需要特别说明的是,metr是一个二维数组,所以在函数内部采用了row*columns+column的形式,大家可以试试传递的形式写成int**metr,我没有试出来....

bool find(int* metr, int rows, int columns, int number){
bool bf=false;
if(metr!=NULL && rows>0 && columns>0){
int row=0;
int column=columns-1;
while(row<rows && column>=0){
if(metr[row*columns+column]==number){
bf=true;
break;
}
else if(metr[row*columns+column]>number){
--column;
}
else{
++row;
}
}
}
return bf;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息