一个指向整型数组的指针的定义为:(单选)
A:int (*ptr)[]
B:int *ptr[]
C:int *(ptr[])
D:int ptr[]上面是原题,如果有正确答案的话,我们又应该如何给这个指针赋值!!
多多谢谢!!

解决方案 »

  1.   

    好象应该是int *ptr = new int[4] 吧?
      

  2.   

    A: int (*ptr)[] 是个二维数据 相当于 int a[*][*];
       例 int A[2][2];
          int (*ptr)[2];
          int *p[1] = A[1][1];B:int *ptr[]; 他相当于定义了个int 指针数组。
        int a[5];
            int *ptr[2];
            ptr[1] = a;
            int data = ptr[1][1]; //EQ a[1]C: 功能与B类类似,应该是本题的答案,它是一个指针!D:标准数组
            
      

  3.   

    补A中的 “int *p[1]”去掉“int”
      

  4.   

    同意showjancn(难得一剑)(CN)的说法。
      

  5.   

    a:
    在<C的缺陷和陷阱>书中有专门的解释.
      

  6.   

    测试了下
    发现A中的例子有误。“*p[1] = A[1][1];”可以这样操作:p = a;
    int data = p[1]1[1]; //EQ A[1][1]
      

  7.   

    #include<iostream.h>
    int main()
    {
    static int a[2]={1,2};
    int (*ptra)[];
    int *ptrb[];
    int *(ptrc[]);
    int ptrd[];
    ptra=a;
    ptrb=a;
    ptrc=a;
            ptrd=a;
            return 0;
    }
    编辑后错误:
    对于 A:
    定义部分没错,但赋值部分:
      Error:Cannot Convert 'int*' to 'int*[]';
      如果改为static int a[2][2]={{1,2},{1,2}}; 编辑通过;
    对于 B.C.D:
    定义部分:
      Error: Size of "ptrb" is unknown or zero;
    我不知道怎么修改。
      

  8.   

    Error: Size of "ptrc" is unknown or zero;
    Error: Size of "ptrd" is unknown or zero;
      

  9.   

    B和D都是把一个数组的首地址赋给一个int型的指针数组了
    D...........
      

  10.   

    B:int *ptr[]; 他相当于定义了个int 指针数组。结果:error C2133: 'ptr' : unknown size
      

  11.   

    "一个指向整型数组的指针"
    ------------------------------------------------------------
    这句话本身就有问题,没有说明是指向几维的指针
    如果一个指针能够指向一维的整型数组,以为就不能指向超过一维的整型数组
    同样,如果一个指针能够指向三维的整型数组,以为就不能指向一、二和超过三维的整型数组如果以上两个观点成立,则指针的指针的指针,该如何称呼?指针的指针的指针和指针是否可以看做是同一种变量?如果不是同一种变量,为什么都叫指针,如果是,为什么不能换着使用
    如果定义:
    int *p;
    int AllName[3][10];则,
    p = AllName; 可否成立?
    如果再定义:int **pName;
    则 pName = AllName;  可否成立?再,如果 p = AllName;  可以成立,则p[1]和p[1][2]分别是什么?
    为什么会有p[1][2]呢?因为p是一个指针,它指向了AllName的开始地址,在它指向该地址以后,这个地址其实又是一个地址,所以p[1]就是一个指针,而这个指针指向了AllName[1]的开始地址,这就是一维指针应该可以指向多维数组而事实上不能指的矛盾所在,不知有高人可否指点一二?盼回!
      

  12.   

    对吧int (*ptr)[]定义数组指针,int* prt[]定义指针数组撒,原因就是优先权的问题吧,^_^
      

  13.   

    A
    A:int (*ptr)[] //指向int型数组的指针,但需指明数组的大小
    B:int *ptr[]   //int型指针的数组,再常见不过
    C:int *(ptr[]) //同B *号左结合像Const符号一样
    D:int ptr[]    //int 型数组,不再举例
    证明:以下代码通过VC.net编译
    int Test[2][3] = {{1,2,3}, {4,5,6}};//测试用二维数组
    int Te = 99;                        //测试用整型变量
    int (*A) [3] = &Test[1];
    int *B[4];
    B[1] = &Te;
    int *C[4];
    C[2] = &Te;
      

  14.   

    A (并不是人云亦云,我也碰过这样的面试题)
       指针数组和数组指针是比较容易搞混的,
    前者是数组,其元素是指针类型;
    后者是指针,它指向一个数组。
    题目中D明显不对,B和C是一个意思,[] 的优先级比 * 高,不用想多深很快就能搞定了。
    面试其实很无聊,不必想得太多。
      

  15.   

    回jszj(老板说mis部不是赚钱的部门,中国软件) :
    int *p;
    int AllName[3][10];
    p = (int*)AllName;//成立
    int **pName;
    pName = (int**)AllName; //成立p[1]是合法的,但p[1][2]不合法。
    虽然p指向了AllName的开始地址,但p[1]并不是一个指针,而是个int值,实际上它等于AllName[0][1](行优先存储)。
    为什么p[1][2]不合法?因为p是一个int*,对编译器来说,它只是一个“指向一个整数的指针”,当然它在使用上可以与“一个整数数组的首地址”作等价替换,但它不能与一个二维整数数组的首地址作等价替换。
      

  16.   

    谭浩强 的C语言教程有这方面的说明吧,大家都没看完这本书吗?
    再怎么说我也都觉得这本书经典啊~~int (*ptr)[] 
    首先这是一个指针,然后才是指向某个数组类型的指针.int *ptr[]
    首先这是一个数组,然后才是一个指针类型的数组。
      

  17.   

    int (*p)[] 的根本实质在于说明了p是一个指针的指针,因为(*p)是一个指针,所以说该赋值可以强制转化为int**p之类型(当然略有副作用)。如此简单的问题,竟然还有人问,以后请注意,下不为例哦。大家的基础太不行了,空中楼阁啊。我是最强侦探,有事联系我,收费绝对合理!!!
      

  18.   

    反正实际编程时我会定义成这样:
    int* pIntPointer;
      

  19.   

    int (*ptr)[]
    一缺少;
    二 缺少size
      

  20.   

    int (*ptr)[]={array1,array2} ;
      

  21.   

    ///////////////////////////////////////////////一个指向 整型数组!的 指针! 的定义及赋值:D: int ptr[] = {5, 4, 3, 2, 1];///////////////////////////////////////////////
    欢迎大家讨论。
      

  22.   

    打错一个括号:
    ///////////////////////////////////////////////一个指向 整型数组!的 指针! 的定义及赋值:D: int ptr[] = {5, 4, 3, 2, 1};///////////////////////////////////////////////
    欢迎大家讨论。
      

  23.   

    D才是正确答案。A声明的是指针数组,而不是一个指针。
    只有D里面的ptr才是一个指针,并且是指向一个整型数组的指针。
      

  24.   

    用排除法,d错,b=c,结果a。hehe
      

  25.   

    D
    int ptr[]定义了指向一个整型数组的指针,ptr为数组的起始地址
      

  26.   

    第一个是指向一给数组的指针,如果PSTR+1的话它要加它的维数*4(如果INT是4的话);
    第二个和第三个是同样的定义,都是定义了指针数组
    只有第四个是正确的了
      

  27.   

    严重同意jszj(老板说mis部不是赚钱的部门,中国软件) 的说法,
    这个问题本来就有问题,根本就没有说清要定义的指针是要指向几维数组。
    要是是一个指向一维数组的指针的话,这个就应该这样定义:
    int (*ptr)[4];//假设是一个指向4个元素的一维数组
    要是在以后要用到i行j列的元素的话,可以这样
    *(*(ptr+i)+j);
    要是题目不说清是要定义一个指向几维数组的指针,我想不出来该怎样定义,就算是能定义出来的话,比如说就算像很多人说的那样,A 是对的的话,那么,现在我假设ptr是一个指向3维数组的指针,那么我要调用[2][1][0]这个元素,要怎么写呢??
      

  28.   

    d正确,答案a中(*ptr)才是指向数组首地址的指针,b,c都是定义的指针数组
      

  29.   

    to  bluwindhrt(风一飞) :int *p;
    int AllName[3][10];
    p = (int*)AllName;//成立
    int **pName;
    pName = (int**)AllName; //成立这样的话,p可以怎么访问?(*p,*(p+x),p[x],p[x][y],哪一个正确或者不正确呢?),如果
    B = *(p+sizeof(int)*20);  则表达式B代表什么?pName = (int**)AllName;
    可以写成
    pName = AllName; 吗?
      

  30.   

    A中的 int (*ptr)[]; 等价于 int* prt[]; 表示的是“若干个指针,每个指针指向一个int变量”只有d才是正确答案。
      

  31.   

    int (*ptr)[]; 等价于 int* prt[]等价的么??
    结合顺序..应该是A,(*ptr)指的是指针的内容,而指针内容有时作为一个数组首地址,即数组名,刚才前面说
    这样定义是个二维数组,其实他们就是等价的~!
      

  32.   

    A: int *ptr[]是2维数组
    D: int ptr[]是1维数组c的指针和数组是可以互换,通用的。
    上面的写法就是
    A: int ptr[][];
    D: int *ptr;
      

  33.   

    A:int (*ptr)[]  
    这是数组指针,它是一个指针,指向一个数组,通常应用在等长的字符串的处理,例如:
    int s[4][4]={"1111","2222","3333","4444"};
    ptr = s;
    Printf(ptr*);/*结果是1111*/
    ptr++;
    Printf(ptr*);/*结果是2222*/
    ptr++;
    Printf(ptr*);/*结果是3333*/
    ptr++;
    Printf(ptr*);/*结果是4444*/B:int *ptr[]
    这是一个指针数组,它是一个数组,书组中每个元素是一个指针,主要应用在不等长的字符串的应用,例如:
    ptr[0] = new char[10];
    ptr[0] = "fdssfda";
    ptr[1] = new char[3];
    ptr[1] = "fds";
    ........................
    C:int *(ptr[])
    与B是一样的
    D:int ptr[]
    普通的数组
      

  34.   

    kevin_wang(砸锅卖铁) 你绝对是胡说呢 你以为*str[] 这个就和str[][]等价了
    str[][]市二位数组 *str[] 还是一为数组 只不过数组里面装着指针呢
      

  35.   

    #include<iostream>
    using namespace std;
    int main()
    {
    static int a[2]={1,2};int *ptr[5];
    int p=5,p2=6,*page,*page2;
    page = &p;
    page2 = &p2;ptr[0]=&p;
    ptr[1]=page2;
    cout << *ptr[0] << endl;
    cout << *page << endl;
    cout << *ptr[1] << endl;
    return 0;
    }