2维字符数组这么定义的:
static char *a1[] =
{
   "abc.xar",                            
   "123.xar"
};在定义指向这个2维字符数组指针的指针时候,vc提示这么定义
char **pointp=a1; 
是正确的.这么定义
char **pointp=&a1;
就会出现错误?

解决方案 »

  1.   

    char **pointp =a1; pointp是指向a1中的第一个元素的地址,既“abc.xar”的地址;而char **pointp=&a1;是指向a1地址所指向的地址(&a1是存储a1的地址)而此地址没有指向另一个char类型的地址,所以引发错误  以上是个人理解
      

  2.   

    **pointp 是一个指针变量,它指向另一个指针变量。
    在你的2维数组中,*a1也是代表指针变量,所以char **pointp =a1的等式是成立的。
    但是在后面的char **pointp=&a1 的等式中,&a1是指数组的地址,所以等式不成立。
    所以就会出现错误。
      

  3.   


    数组 a1[] 是指针数组,里面的元素是指针,所以,你定义char **pointp=a1; pointp 是指向指针的指针,而a1 就是指向指针的指针,其实a1 就是指向a1[]数组的第一个元素,而这个元素本身是个指针,所以,你这个赋值是可以的;而&a1 是数组 a1[]的地址,纯粹的地址而不是指向其它内存地址的指针。所以不能像
    char **pointp=&a1; 这样赋值。但是,可以像下面这样赋值:

    char **point=&a1[0];//正确
    char **pointp=&a1[1];//正确

    因为,a1[1]存储的是个指针,这个指针指向字符串"123.xar"。
      

  4.   

    这么定义
    char **pointp=&a1;
    就会出现错误?================
    因为&a1的类型指向一维,而**pointp指向两维
      

  5.   

    char **pointp=&a1;
    指针变量赋值之后,又变成变量,肯定出错!
      

  6.   

    上面楼写错了.还是不太明白,a1与&a1[0]的区别在哪呢??各存放什么地址?
      

  7.   

    http://www.cnblogs.com/gigikouyi/archive/2006/08/01/464737.html
      

  8.   

    指针即地址 p是一个指针 指向的内存区域存放的又是一个指向char类型的指针 a1是数组的首地址,数组内存放的也是指向char的指针,所以p与a1是同等级 a1与&a1[0]代表的意思一样,a1是内存地址,*a1[0]表示内存中存储的数据。主要是内存地址与地址中存放的数据的区别吧 ,希望有帮助.