问题描述
- 为什么 地址是一样的 ,但是用指针指过去的时候所得的值 是不一样的.求大神解答
- #include
#include
int Cool(int m)
{
int array[20];
int ij;
int k=1;
int l=0;
for(i=0;m!=1;i++k++)
{for(j=2;j<=m;j++) { if(m%j==0) { array[k]=j; m=m/j; break; } }}//************经过我调试的结果 ,下面的程序 测试如下,然而地址 对应不上 l=k;array[0]=l-1;//printf(""他一共有%d个元素:""array[0]-1); for(i=0;i<k;i++){ printf(""n********************n%d ""&array[i]);}return array;//我要将数组传回去
}
//**************看看是否接受到了
int main()
{
int mnk=0;
int Array[20];
int p*p1oo1;
int array[20];
int ijk1=0;
int sum = 1;
int MinSum=0;
printf(""please input the two values:n"");
scanf(""%d%d""&m&n);
//*****************分别用两个数组接收一下,来测试下吧
//**************
o=m;
o1=n;
//************第一次运行的时候发现是循环条件有了些问题printf(""n***************n"");//p=array;p=Cool(m);array[0]=*p;printf(""************ %d *****""p);printf(""there are have %d 个""&array[0]);p++;//*************************************//下面的这个部分有问题了 for(i=0;i<array[0];i++p++){ printf(""%d ""p);//首先可以证明的一点是指针一定是连续的. ..我输出了下地址证明的确是连续的 } //*****************//****************下面这个要求的是最大公约数/*for(i=0;i<k;i++){ for(j=i;j<k1;j++) { if(array[i]==array1[j]) { sum=sum*array[i];break; } }} //**************这个是最大公约数的结果 printf(""n*********n%d:""sum);MinSum=(o*o1)/sum;printf(""n*********n%d:""MinSum);//接下来 我要求最小公倍数了 */return 0;
}//我们只讨论指针的问题
解决方案
为什么地址一样的 *p++ 和 array[20]求解的结果却不同却不同?
解决方案二:
*p++每次++只会移动一个元素的距离(是int的话就是4)怎么会和array[20]地址一样?
代码略难懂,有两点:
1.打印地址可以用%p来打印
2.你返回了一个局部数组变量的地址
时间: 2024-08-19 06:55:47