您的位置:程序门 -> c/c++ ->



指针指向二维数组的问题,高手指教


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


指针指向二维数组的问题,高手指教[无满意答案结贴,结贴人:ericstock]
发表于:2007-08-10 18:14:17 楼主
#include <stdio.h>  
void   main()  
{  
int   *p;  
int   a[3][3]={1,2,3,4,5,6,7,8,9};  
}  
请问如何指向5这个数?  
请具体说明步骤
发表于:2007-08-10 18:17:461楼 得分:0
请问如何指向5这个数?  
_____________________________-
??????????
发表于:2007-08-10 18:19:482楼 得分:0
p   =   &a[1][1];   //   a[1][1]是二维数组中元素5,再对其取地址赋给p就可以了
发表于:2007-08-10 18:22:493楼 得分:0
汗,竟然看成了指向5个数。。。。。
发表于:2007-08-10 18:36:324楼 得分:0
#include <stdio.h>
void   main()
{
int   *p;
int   a[3][3]={1,2,3,4,5,6,7,8,9};

p   =   a[1]; //   a等于第一行首地址

printf   ( "%d\n ",   *((p+1)+0));     //     (p+1)+0表示第一行第0列元素,即5这个数的地址
}
发表于:2007-08-10 18:41:045楼 得分:0
#include <stdio.h>
#include <iostream>
using   namespace   std;
void   main()  
{  
int   *p;  
int   a[3][3]={1,2,3,4,5,6,7,8,9};  
p   =   &a[1][1];
cout < <*p < <endl;
system( "pause ");
return;
}
发表于:2007-08-10 22:30:556楼 得分:0
#include <stdio.h>
#include <iostream>
using   namespace   std;
void   main()  
{  
int   *p;  
int   a[3][3]={1,2,3,4,5,6,7,8,9};  
p   =   &a[1][1];
cout < <*p < <endl;
system( "pause ");
return;
}

这个程序我基本看不懂,能不能从头到尾   具体解释一下
发表于:2007-08-10 22:36:257楼 得分:0
#include <stdio.h>
#include <iostream>
using   namespace   std;
void   main()  
{  
int   *p;  
int   a[3][3]={1,2,3,4,5,6,7,8,9};   //创建3行3列数组
p   =   &a[1][1];//整型指针指向第二行第二列
cout < <*p < <endl;//输出p指向的对象
system( "pause ");
return;
}
int   a[3][3]={1,2,3,4,5,6,7,8,9}如下:
1     2     3
4     5     6
7     8     9
5就是第二行第二列
发表于:2007-08-11 02:11:448楼 得分:0
把二维数组看成一维数组就行了...有那么麻烦么??
发表于:2007-08-11 11:02:499楼 得分:0
是不是这样   *(*p[1]+1)
发表于:2007-08-11 14:37:4310楼 得分:0

#include <stdio.h>
void   main()
{
int   *p;
int   a[3][3]={1,2,3,4,5,6,7,8,9};

p   =   a[1];//   a等于第一行首地址

printf   ( "%d\n ",   *((p+1)+0));     //     (p+1)+0表示第一行第0列元素,即5这个数的地址
}

发表于:2007-08-11 14:44:5011楼 得分:0
是不是这样   *(*p[1]+1)
-----------------------
1,2,3       第0行
4,5,6       第1行
7,8,9       第2行

是这样:*(*(p+1)+1)  

表示第   1   行第   0   个元素即   5
发表于:2007-08-11 15:50:4112楼 得分:0
p   =   a[1]+1;
发表于:2007-08-12 20:01:5313楼 得分:0
0     1     2
— ¦—————
0   ¦   1     2     3
    ¦
1   ¦   4     5     6
    ¦
2   ¦   7     8     9

那么5所在的下标就是a[1][1]了。直接输出a[1][1]就可以了。
也可以用指针的方法,*(a+1)+1);其中a就隐含的指向了a[0][0],相当于一个指针了。
发表于:2007-08-13 09:45:3414楼 得分:0
楼上的图示说的挺清楚了
我再帮个小忙
原程序中的int   a[3][3]={1,2,3,4,5,6,7,8,9};  
实际上是从a[0][0]开始到a[2][2]依次排列的,
即a00,a01,a02,a10,a11,a12,a20,a21,a22.
虽然貌似二维,其实可以按一维进行赋值或取值。
所以其中的a[1][1]放的是5
发表于:2007-08-13 20:22:0915楼 得分:0
a[1][1]=*(*(a+1)+1)=*(a[1]+1)=5
发表于:2007-08-16 10:22:4316楼 得分:0
#include <stdio.h>  
void   main()  
{  
int   *p   =   null;  
int   i;
int   a[3][3]={1,2,3,4,5,6,7,8,9};  
for(i=0;i <9;i++)
{
p   =   *a+i;
printf( "%d\n ",*p);
}
}
个人认为,以上才是最直观的索引方式。。。请高手赐教!
发表于:2007-08-16 10:30:4617楼 得分:0
如果就想输出数组中的5,你只需加一句判断语句,然后指定输入就可以了。。
发表于:2007-11-21 19:23:3218楼 得分:0
哪有那么复杂,其实很简单的啊!
*(p+1)+1就是5的地址
*(*(p+1)+1)就是5这个数了
好好看看课本吧!


快速检索

最新资讯
热门点击