指针指向“指向指针的指针”,faint...
程序是写对了,不过自己迷糊了.....越想越晕......
change函数中,我用pt指向*p——p这里是数组指针,那么pt岂不是变成了指向指针的指针了?
那么定义pt的时候怎么pt应该写成int **pt吗?
这样写是否有点什么“基类型”不对么?
我搞晕了.....连题目都取晕了.......
很乱ing......
求助高手指点.....
(详细解答者一次性重赏10分)
#include <stdio.h>
void print (int (*p)[5])
{
int i,j;
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
printf("%5d",*(*(p+i)+j));
}
printf("\n");
}
}
void change(int (*p)[5]) /*把最大数放中间进行调换*/
{
int i,j,max,temp,*pt;
max=**p;
pt=*p;
for (i=0;i<5;i++)
for(j=0;j<5;j++)
{
if (max<*(*(p+i)+j))
{
max=*(*(p+i)+j);
pt=*(p+i)+j;
}
}
temp=p[2][2];
p[2][2]=*pt;
*pt=temp;
}
void main()
{
int arr[5][5]={{35,34,33,32,31},{30,29,28,27,26},{25,24,23,22,21},{20,19,18,17,16},{15,14,13,12,11}};
puts("Matrix:");
print(arr);
change(arr);
puts("Now,Matrix:");
print(arr);
}
问题点数:10、回复次数:15Top
1 楼bluei(蓝之我)回复于 2003-08-03 13:27:39 得分 0
还是可以理解的。Top
2 楼MaiCle(原来小日本连畜生都不如)回复于 2003-08-03 13:34:15 得分 0
用指针指向二维数组。没什么难度的。Top
3 楼ScorpioZZR(小天使)回复于 2003-08-03 14:53:41 得分 0
怎么没人详细解答一下呢?我晕Top
4 楼LoopyPuzzle(浪子无名)回复于 2003-08-03 15:19:34 得分 1
其实是很好理解的,指向整形的指针变量你可以理解吧?它不过是一个变量,只不过这个变量存储的是一个整形变量的地址,通过这个指针你就可以访问这个整形变量。指向指针的指针也是这个道理,只不过这个指针指向的是一个指针变量的地址,通过它可以访问该指针变量,进而访问其他的变量。在你的p指针数组里,你可以把p理解为一个二维数组,p为数组名,那么pt=*p则表示pt指向二维数组中第一行的首地址,你也可以理解为一个一维数组的数组名。所以pt的定义为:int *pt。建议你好好将书中讲述指针的这一章仔细看一下,认真理解。Top
5 楼crcr(游侠)回复于 2003-08-03 15:40:52 得分 1
#include <stdio.h>
void print (int (*p)[5])
{
int i,j;
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
printf("%5d",*(*(p+i)+j));
}
printf("\n");
}
}
void change(int (*p)[5]) /*把最大数放中间进行调换*/
{
int i,j,max,temp,*pt; //pt是一个一级指针,*只是说明它是一个指针类型 ,
max=**p; // **P是该数组的第一个数,因为P是首址
pt=*p; //PT是一个一级指针,不是一个指向指针的指针,因为主P是一个指向一个二维数组的行指针,它是行指针,(这里PT和P是一样的,)例如,PT+1,是指向了下一行,而不 是指向了下一个数,
for (i=0;i<5;i++)
for(j=0;j<5;j++)
{
if (max<*(*(p+i)+j)) //如果MAX<数组中的一个数,找最大数J代表是列指针,I是行指针,
{
max=*(*(p+i)+j); //把该数賳给MAX
pt=*(p+i)+j; //地址赋给PT
}
}
temp=p[2][2]; //保存中间的数
p[2][2]=*pt; //把找到 的最大数赋给最中间
*pt=temp; //把中间的放在要找到 的数的位置 上
}
void main()
{
int arr[5][5]={{35,34,33,32,31},{30,29,28,27,26},{25,24,23,22,21},{20,19,18,17,16},{15,14,13,12,11}};
puts("Matrix:");
print(arr);
change(arr);
puts("Now,Matrix:");
print(arr);
}
Top
6 楼leialen(阿伦)回复于 2003-08-03 15:59:50 得分 1
http://www.csdn.net/develop/article/14/14165.shtmTop
7 楼leialen(阿伦)回复于 2003-08-03 16:08:03 得分 1
http://www.csdn.net/develop/article/14/14177.shtmTop
8 楼pengzhenwanli(紫气日盈)回复于 2003-08-03 17:28:25 得分 0
我以前解释了那么多,白费了!
Top
9 楼ScorpioZZR(小天使)回复于 2003-08-03 17:48:32 得分 0
pengzhenwanli:
嘘!小声点~~~~~~
你解释的偶都接收了呀~~这个,这个是新问题嘛~~~~~~
http://expert.csdn.net/Expert/topic/2104/2104072.xml?temp=.3555719
~~~~>>_<~~~~~
偶不就是笨了点嘛......Top
10 楼fqcd555(love violet)回复于 2003-08-03 17:51:14 得分 0
晕啊。Top
11 楼ScorpioZZR(小天使)回复于 2003-08-03 18:09:29 得分 0
leialen:
你的大作?
fqcd555:
你晕什么?Top
12 楼pengzhenwanli(紫气日盈)回复于 2003-08-03 21:55:01 得分 6
void change(int (*p)[5]) /*把最大数放中间进行调换*/
{
int i,j,max,temp,*pt;
max=**p;//p是指向数组的得指针提领*p,这样不是数组第一行的首地址吗?
相当于
int **p1;
int *p2;
p2 = *p1;这样p1被提领了一次,是另一个地址,不用p2只用什么指?
再提领**p1就是*p1指向的地址的内存放的值。
我在你的另一个帖子里解释了很长时间。
如果你再不结帖,我再也不回答你的问题。Top
13 楼ScorpioZZR(小天使)回复于 2003-08-03 22:38:26 得分 0
谢谢你阿,紫气大哥!:——————Top
14 楼ScorpioZZR(小天使)回复于 2003-08-03 22:47:06 得分 0
唉,可怜我被误会了阿!
我可是守法公民呐Top
15 楼ScorpioZZR(小天使)回复于 2003-08-03 22:57:51 得分 0
我刚看了我的问题记录,发贴6个,结了四个,已经很守法了呀,唉,我可是良民阿Top




