2。蓝色部分能不能改为:int **p=a;为什么?我已经在这论坛发了好多关于这个题的文章了,但得到的答案很迷糊,请
高人指点!
#include<stdio.h>
int BubbleUp(int **array,int length);
int main()
{
int a[2][3]={3,4,7,8,2,1};
int *ptr=a[0];
int i;
int **p=&ptr;
BubbleUp(p,6);
for(i=0;i<6;i++)
printf("%d\t",ptr[i]);
getchar();
return 0;
}
int BubbleUp(int **array,int length)
{
int i,j, temp;
for(i=0;i<length;i++)
for(j=0;j<length-i-1;j++)
if(*(*array+j)>*(*array+j+1))
{
temp=*(*array+j);
*(*array+j)=*(*array+j+1);
*(*array+j+1)=temp;
}
return 0;
}
----------------解决方案--------------------------------------------------------
[此贴子已经被作者于2007-11-15 15:56:32编辑过]
----------------解决方案--------------------------------------------------------
谢谢!
那为什么可以,先int int *ptr=(int *)a;再int **p=&ptr;
----------------解决方案--------------------------------------------------------
[此贴子已经被作者于2007-11-15 16:04:36编辑过]
----------------解决方案--------------------------------------------------------
a 只是一个值,这个值是数组首元素的地址.就不能int **p = (int **)a;?那 int *ptr=(int *)a 又可以?
----------------解决方案--------------------------------------------------------
我理一下思路
你的数组是:
int a[2][3]={3,4,7,8,2,1};
int **p = (int **)a; // a 的值是 &a[0][0],
那么 *p == 3; 3 是一个有效的 int 指针的值吗!
//-----------------------------------------------------
int *ptr=(int *)a;
这完全可以。
//-----------------------------------------------------
其实根本不存在二维数组或更多维的数组。
对于多维数组,完全是一种便利的方法。
int a[2][3]; 和 int a[6]; 完全是一样的,都是 6 * sizeof(int) 。
多维只是语法上的,对于实现都是一维的。
//------------------------------------------------------------------------------
自己都要晕了。
对于楼主的程序完全是不良风格!
[此贴子已经被作者于2007-11-15 16:14:44编辑过]
----------------解决方案--------------------------------------------------------
// 我修改的。
#include<stdio.h>
int BubbleUp(int *ar, int length);
int main(void)
{
int a[2][3] = {3,4,7,8,2,1};
int i;
int *p = (int *)a;
BubbleUp(p, 6);
for(i = 0; i < 6; i++)
printf("%d\t", p[i]);
getchar();
return 0;
}
int BubbleUp(int *ar, int length) // 对于这个程序完全没必要使用 指针的指针
{
int i, j, temp;
for(i = 0; i < length; i++)
for(j = 0; j < length - i - 1; j++)
if(ar[j] > ar[j+1])
{
temp = ar[j];
ar[j] = ar[j + 1];
ar[j + 1] = temp;
}
return 0;
}
----------------解决方案--------------------------------------------------------
正确理解指针,二维指针是指向指针的指针
----------------解决方案--------------------------------------------------------
二维数组不是指向指针的指针,不要理解错了,二维数组是一个指向数组的指针
----------------解决方案--------------------------------------------------------
#include<stdio.h>
int main(void)
{
int a[2][3] = {88,4,67,8,12,1};
printf("%p\n%p\n%p\n", a, a[0], &a[0][0]);
getchar();
return 0;
}
// a, a[0], &a[0][0], 这3者的值完全是相同的
----------------解决方案--------------------------------------------------------