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

C++指针数组和数组指针--笔试面试系列

2013-08-28 22:08 211 查看
一、
int main(int argc, _TCHAR* argv[])
{  
    int a[5]={1,2,3,4,5};
    int *ptr=(int *)(&a+1);
    int *ptr1=a;
    printf("%d,%d",*(a+1),*(ptr-1));

     return 0;
}
结果:2,5

解析:a[5]={1,2,3,4,5}是定义并初始化一个数组;&a表示把a看成一个二维数组时取第一组(行)的地址(指向该行首地址),&a+1表示取第二组(行)的地址(指向该行首地址);a表示取数组的首地址,a+1表示首地址后的下一个地址;*ptr=(int *)(&a+1)表示使指针ptr指向第二组的首地址;ptr-1减一则表示指向ptr的前一个地址,也就是第一组的最后一个地址。

 

int main(int argc, _TCHAR* argv[])
{  
    int v[2][10]= {{1,2,3,4,5,6,7,8,9,10},{11,12,13,14,15,16,17,18,19,20}};

    int (*a)[10]= v;//数组指针,即每加1,移动一个数组
    cout<<**a<<endl;
    cout<<**(a+1)<<endl;
    cout<<*(*a+1)<<endl;
    cout<<*(a[0]+1)<<endl;
    cout<<*(a[1])<<endl;
     return 0;
}
结果:1 11 2 2 11



int (*ptr)[] 指向整型数组的指针

int *ptr[] = int *(ptr[])
是指针数组,ptr[]里面存的是地址。它指向位置的值就是*ptr[0]、*ptr[1]等

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: