int *p[3]和int (*p)[3] 的区别,举例说明一下

jackxiang 2010-9-15 11:14 | |
int *p[3] p是一个数组,此数组有3个元素,每个元素都是int*类型,也就是指向整型数据的指针类型。

int a=10,b=20,c=30;
int*p[3]={&a,&b,&c};

而int(*p)[3]中的p是一个指向数组的指针,此数组有3个int类型的元素。例如:

int a[3]={1,2,3}; 那么p就是指向这个数组a的指针。
int(*p)[3]=&a; // 这里赋值一定要用取地址符号。也就是取数组a的地址。

不可以这样赋值: int(*p)[3]=a; // error :类型不兼容。a本来是数组类型,是不可以赋值给int(*)[3]这个类型的。

但是这样是可以的int *p1=a; // ok 因为a可以隐式转换为int*类型,其值实际上就是数组第一个元素的地址,也就是&a[0]




*p[3]  这个是一个指针数组  它所代表的意思是每一个元素都相当于一个指针变量
而(*p)[3]  p是一个指针变量,表示指向含有3个整型元素的一维数组


前者可以类似于二维数组  把它看成是由3个一维数组组成的 经常与字符串搭配使用  比较方便操作 把多个字符串放在一个指针数组中
后者是用来引用二维数组的  像a[2][3]这个二维数组 我们既可用指针来引用 又可用(*p)[3]来引用  一般使用(*p)[3





#include <iostream.h>

int main()
{   int i,j;
    int a[2][3]={3,4,5,6,7,8};
    int *p[3] ;//表示存贮是3个整型变量地址;
    int (*q)[3]; //表示指向3个整型数组元素的一维数组指针

    //把第一行三个元素地址存放在p指针数组中
      for( i=0;i<3;++i)
      p[i]=&a[0][i];

      //输出指针数组中地址所对应值
      for( j=0;j<3;++j)
      cout<< *p[j]<<" ";
      cout<<endl;

      q=a;//把数组a开始地址赋给指向一维数组q;
      for(i=0;i<2;i++)
      for(j=0;j<3;j++)
       cout<< *(*(q+i)+j)<<" "; //输出数组中元素

      return 0;
}

来源:http://zhidao.baidu.com/question/128144862.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3499/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2010-9-15 11:15
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]