一个指向整型数组的指针的定义为:(单选)
A:int (*ptr)[]
B:int *ptr[]
C:int *(ptr[])
D:int ptr[]上面是原题,如果有正确答案的话,我们又应该如何给这个指针赋值!!
多多谢谢!!
A:int (*ptr)[]
B:int *ptr[]
C:int *(ptr[])
D:int ptr[]上面是原题,如果有正确答案的话,我们又应该如何给这个指针赋值!!
多多谢谢!!
解决方案 »
- MFC初学者的疑惑
- 请问在哪里可以找到VC关于PPT的API呀
- 大家帮我看看,为什么总是提示'class' type redefinition
- VC里有类浏览器吗?如可查看MFC类的的成员函数,数据成员。
- 如何给CStatic添加垂直滚动条?
- 请教如何在程序中得到系统中某个组件的相关信息
- 请教有关VC++的打印(预览)问题
- 请问在MDI应用程序中,左边的WorkSpace视图如何刷新?急,在线等!初学者
- 请教大虾,我想得到表头的信息该怎么做啊。例:要得到学生表的,姓名,年龄等附给下拉列表啊!!!
- 请问如何设计实现类似word显示最近打开文档的菜单的功能?
- 如果1个EXECL在使用程序前已经打开,我如何去对他操作?(在线等待)
- 关于下载网页源代码的问题.
例 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:标准数组
在<C的缺陷和陷阱>书中有专门的解释.
发现A中的例子有误。“*p[1] = A[1][1];”可以这样操作:p = a;
int data = p[1]1[1]; //EQ A[1][1]
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;
我不知道怎么修改。
Error: Size of "ptrd" is unknown or zero;
D...........
------------------------------------------------------------
这句话本身就有问题,没有说明是指向几维的指针
如果一个指针能够指向一维的整型数组,以为就不能指向超过一维的整型数组
同样,如果一个指针能够指向三维的整型数组,以为就不能指向一、二和超过三维的整型数组如果以上两个观点成立,则指针的指针的指针,该如何称呼?指针的指针的指针和指针是否可以看做是同一种变量?如果不是同一种变量,为什么都叫指针,如果是,为什么不能换着使用
如果定义:
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]的开始地址,这就是一维指针应该可以指向多维数组而事实上不能指的矛盾所在,不知有高人可否指点一二?盼回!
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;
指针数组和数组指针是比较容易搞混的,
前者是数组,其元素是指针类型;
后者是指针,它指向一个数组。
题目中D明显不对,B和C是一个意思,[] 的优先级比 * 高,不用想多深很快就能搞定了。
面试其实很无聊,不必想得太多。
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*,对编译器来说,它只是一个“指向一个整数的指针”,当然它在使用上可以与“一个整数数组的首地址”作等价替换,但它不能与一个二维整数数组的首地址作等价替换。
再怎么说我也都觉得这本书经典啊~~int (*ptr)[]
首先这是一个指针,然后才是指向某个数组类型的指针.int *ptr[]
首先这是一个数组,然后才是一个指针类型的数组。
int* pIntPointer;
一缺少;
二 缺少size
欢迎大家讨论。
///////////////////////////////////////////////一个指向 整型数组!的 指针! 的定义及赋值:D: int ptr[] = {5, 4, 3, 2, 1};///////////////////////////////////////////////
欢迎大家讨论。
只有D里面的ptr才是一个指针,并且是指向一个整型数组的指针。
int ptr[]定义了指向一个整型数组的指针,ptr为数组的起始地址
第二个和第三个是同样的定义,都是定义了指针数组
只有第四个是正确的了
这个问题本来就有问题,根本就没有说清要定义的指针是要指向几维数组。
要是是一个指向一维数组的指针的话,这个就应该这样定义:
int (*ptr)[4];//假设是一个指向4个元素的一维数组
要是在以后要用到i行j列的元素的话,可以这样
*(*(ptr+i)+j);
要是题目不说清是要定义一个指向几维数组的指针,我想不出来该怎样定义,就算是能定义出来的话,比如说就算像很多人说的那样,A 是对的的话,那么,现在我假设ptr是一个指向3维数组的指针,那么我要调用[2][1][0]这个元素,要怎么写呢??
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; 吗?
结合顺序..应该是A,(*ptr)指的是指针的内容,而指针内容有时作为一个数组首地址,即数组名,刚才前面说
这样定义是个二维数组,其实他们就是等价的~!
D: int ptr[]是1维数组c的指针和数组是可以互换,通用的。
上面的写法就是
A: int ptr[][];
D: 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[]
普通的数组
str[][]市二位数组 *str[] 还是一为数组 只不过数组里面装着指针呢
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;
}