100分问一个关于二级指针和指针数组以及数组指针的问题

阿尔博特 2011-11-25 05:14:52

#include<iostream>
using namespace std;
int main()
{
int *p[2];
p[0] = new int[3];
p[1] = new int[3];
for(int i = 0;i != 2;++i)
for(int j = 0;j != 3;++j)
p[i][j] = i;
int **a = p;
int (*ptr)[2];
a = ptr;
for(int i = 0;i != 2;++i){
for(int j = 0;j != 3;++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
我想问的是a是一个指向指针的指针,即二级指针,而p是一个数组名字,只是元素都是指针,那么p应该相当与一个一级指针
那么为什么int **a = p;是正确的。而ptr是数组指针,a = ptr;无法通过编译,两个问题。1上面求解释。2谁能详细解释一下a p 和ptr?
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lhy 2011-11-25
  • 打赏
  • 举报
回复
指向数组的指针指向的是数组的第一个元素,所以ptr其实int *ptr
miaomiao3777 2011-11-25
  • 打赏
  • 举报
回复
我要提问啊。。。提问不了
iamnobody 2011-11-25
  • 打赏
  • 举报
回复
我想问的是a是一个指向指针的指针,即二级指针,而p是一个数组名字,只是元素都是指针,那么p应该相当与一个一级指针
那么为什么int **a = p;是正确的。而ptr是数组指针,a = ptr;无法通过编译,两个问题。1上面求解释。2谁能详细解释一下a p 和ptr?

1.a是一个二级指针。p是一个指针的数组。一个数组名可以隐式转换成它的首元素的指针,本例中,元素类型是指针,于是数组名转换成指针的指针。


2.int **a = p;
int (*ptr)[2];
a = ptr;
这个当然没能通过,ptr是指针,ptr指向的元素类型是int[2];也就是指向数组。
但是a指向的类型是指针。两个指针指向不同的类型,当然不能直接赋值。
数组名可以隐式转换为首元素的指针,但是,指向数组的指针是没有隐式转换的。
pengzhixi 2011-11-25
  • 打赏
  • 举报
回复
1.p本身可以弱化为一个指针,这个你在传递数组给函数的时候就知道。int p[2]弱化后是int*那么int*p[2]弱化后自然是int而ptr 本身就已经是一个指针了,只是它指向一个数组。它就没有弱化的时候,所以你在将ptr赋给int**是肯定报错了。http://topic.csdn.net/u/20091123/11/0c03d2e2-0655-4634-8287-0e2315d889fc.html?60274推荐个链接让你学习

64,631

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧