指针之诡谲:“指向一维数组的指针变量”和“指针数组”(1)
1.如果我想借由指针p来把这个数组的数以矩阵的方式全打印出来,应该怎么写呢?p=arr是把arr的首地址传给它吧?那么,p+1又代表什么意思呢?
2.如果例2中,我改用指针数组来实现输出这个矩阵,是否可以?如果可以,程序要怎么写呢?
3.对于“指向一维数组的指针变量”和“指针数组”大家有什么使用心得吗?有没一些经验说,在什么情况下用“指向一维数组的指针变量”比较合适,在什么情况用“指针数组”比较合适呢?
每个问题10分!谢谢~
-----------
1.
void main()
{
int i;
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}};
int (*p)[5];
puts("Matrix:");
p=arr;
/*printf("");*/
}
--------
2.
void main()
{
int i;
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}};
int *p[5];
puts("Matrix:");
}
问题点数:30、回复次数:15Top
1 楼pengzhenwanli(紫气日盈)回复于 2003-08-01 00:49:31 得分 5
.如果我想借由指针p来把这个数组的数以矩阵的方式全打印出来,应该怎么写呢?p=arr是把arr的首地址传给它吧?那么,p+1又代表什么意思呢?
以P打印出来的写法最简单的
void show( int (*p)[5] )
{int i,j;
for( i = 0; i< 5; i++ )
{for(j = 0; j< 5;j++ )
cout << p[i][j] << " ";
cout << endl;
}
}
p=arr是把arr的首地址传给它,
显然p+1代表arr[1]或者是arr+1
Top
2 楼pengzhenwanli(紫气日盈)回复于 2003-08-01 00:58:35 得分 5
2.如果例2中,我改用指针数组来实现输出这个矩阵,是否可以?如果可以,程序要怎么写呢?
写法是一样的。
void move(int *b)
{
int i,j,t;
for (i=0;i<=N-1;i++)
for(j=i+1;j<=N-1;j++)
{t=*(b+N*i+j);*(b+N*i+j)=*(b+N*j+i);*(b+N*j+i)=t;}
}
因为你的指针数组仍然还是指针,变不成数组的指针。
int *p[5];
相当于
int *p1;
int *p2;
int *p3;
int *p4;
int *p5;
只是声明了5个指针。遍不成数组的指针。Top
3 楼pengzhenwanli(紫气日盈)回复于 2003-08-01 00:59:42 得分 5
3.对于“指向一维数组的指针变量”和“指针数组”大家有什么使用心得吗?有没一些经验说,在什么情况下用“指向一维数组的指针变量”比较合适,在什么情况用“指针数组”比较合适呢?
这个比较难说。我看你是对这两个概念不清楚,还是在看看书再问吧/Top
4 楼youngmean(小明)回复于 2003-08-01 01:07:05 得分 1
p+1是第二个数组元素的地址.Top
5 楼bahanzo1(绯雨流烟)回复于 2003-08-01 09:36:03 得分 1
p+1 是第arr[1],
能用数组直接打印为什么还要用指针数组呢?Top
6 楼MyNameEPC(MyName)回复于 2003-08-01 11:51:28 得分 1
输出一个三维数组的全部内容:
int array[2][2][2] = {1,2,3,4,5,6,7,8};
int *p = &array[0][0][0];
for(int i=0; i<8; ++i,++p)
cout<<*p;
输出内容:
12345678
我想你知道该怎么做了。Top
7 楼tjjmmtds(看我72变)回复于 2003-08-01 12:11:25 得分 0
pengzhenwanli(紫气日盈):
关于你回答的一问,我是说,为什么p这里其实也不过是个指针变元,为什么可以写成你那种二维数组的方式??
关于你回答的二问,老大,偶很笨啦~能不能不厌其烦的写出来一下呀?
关于你回答的三问,冤枉呐~我看的很仔细了呜呜,书(《C程序设计》)上就是没有说它们的具体用法,各自有一个例子而已。其中用(*p)[]那种的例子我粘贴出来了呀,用*p[]的都是用来放字符串——我就是想知道,是否可以改用指针数组来实现“指向一维数组的指针”所实现的功能??
而例子看不出什么区别,我就是看不懂才上csdn来问的嘛,不然谁那么无聊拨号上网啊??
拨号太痛苦了~~
我觉得我对这两个概念很清楚,我知道你说的*p[2]和(*p)[2]的区别,问题是不太懂得应用,我想看几个例子,可以用*p[2]实现又可以换成(*p)[2]实现的,能不能简单的为我示范一下?
另外,我虽然也看的懂那个c++里的cin /cout,不过,老大能否迁就一下偶这个C的初学者哩?Top
8 楼yiminggw(某某鸟人)回复于 2003-08-01 12:15:19 得分 1
int (*p)[4]-->p是一个指针变量,它指向包含4个元素的一维数组,即相当于指向一行的首地址
int *p[4] -->表示p是一个指针数组,包含4个指针变量
Top
9 楼starryC(CSDN)回复于 2003-08-01 12:38:31 得分 1
楼上的有说和没说一个样!
楼主都说知道这个概念了!Top
10 楼starryC(CSDN)回复于 2003-08-01 12:39:29 得分 1
拜托要分也不要这样子嘛,像我学着点,有事没事来up一下哈~~Top
11 楼pengzhenwanli(紫气日盈)回复于 2003-08-01 13:04:28 得分 5
如果你非要用指针数组这样好了
void show( int *p )
{int i;
for( i = 0;i < 5;i++ )
printf( "%d",p[i] );
printf("\n");
}
void main()
{
int i;
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}};
int *p[5];
p[0] = *arr;
p[1] = *(arr+1);
p[2] = *(arr+2 );
p[3] = *(arr+3);
p[4] = *(arr+4 );
puts("Matrix:");
for( i = 0; i < 5; i++ )
show(p[i] );
}
你自己看有没有必要?
Top
12 楼grasshopperliu(老前辈——曾经沧海)回复于 2003-08-01 13:47:08 得分 1
int (*p)[4];
表示的是它可以确定一个四个元素的的间隔
如:
int a[4];
p=a;//p[i]就相当于a[i]
int b[3][4];
p=b;//也是相当于p是指向b[0][0]的,p[i]还是b[0][i]
/////////////////////////////////////////////////
而int *p;
则不同,p=a;//p[i]就相当于a[i],但它可以到p[5],p[6]
p=b;//相当于p是指向b[0]的,p[i]就是b[i]了
Top
13 楼maxcai(cailin)回复于 2003-08-01 14:40:09 得分 1
MyNameEPC(MyName)说得对,学习!Top
14 楼starryC(CSDN)回复于 2003-08-02 14:38:14 得分 1
怎么不向我学习??Top
15 楼cityvagrant(城市过客)回复于 2003-08-02 14:40:13 得分 1
TO:starryC(倒立行走的人)
拜托
要分也不要这样子嘛,像我学着点,有事没事来up一下哈~~
是不是这样UPTop




