C++:数组指针为何在定义时可以这样定义:int **p,这p是个变量,而int *p[10]这p是个常量,
3个回答
展开全部
首先,C++在处理数组的时候,它就是处理开始的地址。
比如你定义了int Buffer[10];这样的话,其实C++并不知道这个数组是10个int的大小,C++只知道Buffer这个地址。
那么对于二维的数组其实是一样的。比如int *p[10],代表什么?这是定义了10个指针,并且每个指针都可以指向数组,并且数组的本质含义其实就是保存数组的首地址而已。
那么int **p自然很好理解了,二级指针,其实就是保存数组地址。(*p)其实就是取得某一个数组的首地址。
比如你定义了int Buffer[10];这样的话,其实C++并不知道这个数组是10个int的大小,C++只知道Buffer这个地址。
那么对于二维的数组其实是一样的。比如int *p[10],代表什么?这是定义了10个指针,并且每个指针都可以指向数组,并且数组的本质含义其实就是保存数组的首地址而已。
那么int **p自然很好理解了,二级指针,其实就是保存数组地址。(*p)其实就是取得某一个数组的首地址。
更多追问追答
追问
我问的是:int *p[10]中的p是常量,int **p,这p是个变量,对不对
追答
不,不是常量。你为什么以为他是常量呢?我给你写了一个例子你看看。
我分别让p[0]这个指针指向两个数组,并且分别输出了两个数组。并且没有出错,证明p[0]这个指针可以指向任意一个地址!(当然了,这个地址可以是数组的地址,也可以是变量的地址)。
int *p[5];
int Buffer1[5];
int Buffer2[5];
for( int ii=0; ii<5; ii++ )
{
Buffer1[ii] = ii;
Buffer2[ii] = (4 - ii);
}
p[0] = Buffer1;
for ( int ii=0; ii<5; ii++ )
{
cout<<p[0][ii]<<",";
}
cout<<endl;
p[0] = Buffer2;
for ( int ii=0; ii<5; ii++ )
{
cout<<p[0][ii]<<",";
}
cout<<endl;
展开全部
int **p,这p是个变量,而int *p[10]这p是个常量, 正确
首先int *p[10]是一个指针数组,他表示这个数组有十个指针元素(但是每一个元素相当于一个指针变量因为你不知道它具体指向哪一个整型元素只有等待分配后才知道)但是就整体而言他是一个含有十个指针元素的数组所以看做常量,
int **p就不用解释了吧,这是一个指向指针的指针,,
首先int *p[10]是一个指针数组,他表示这个数组有十个指针元素(但是每一个元素相当于一个指针变量因为你不知道它具体指向哪一个整型元素只有等待分配后才知道)但是就整体而言他是一个含有十个指针元素的数组所以看做常量,
int **p就不用解释了吧,这是一个指向指针的指针,,
追问
除了一个是变量,一个是常量,其它的int **p与int *p[10]没差别吧
追答
在某些场合可以互换使用,具体就看你更深入的去学习了等你学习汇编后,,当你写程序写得多了自然就都懂了,,现在不在死扣这些细节东西,,,,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为 数组名可以看成数组的首地址,其实就是一个指针,如 int p[10] 可以用 int *p 来代替。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询