|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 g1063496360 于 2021-6-3 21:14 编辑
#include <stdio.h>
int main()
{
int a[]={1,3,5,7,9},
b[]={2,4,6,8,10},
c[10];
int *p1=a, *p2=b, i;
for (i=0; i<10; i++)
{
if( *(p1) > *(p2) )
{
c[ i ] = *(p2);
*(p2) = *(p2+1);
}
else
{
c[ i ] = *(p1);
*(p1) = *(p1+1);
}
}
for (i=0; i<10; i++)
{
printf("%2d",c[i]);
}
printf("\n\n");
return 0;
}
#include <stdio.h>
int main()
{
int a[]={1,3,5,7,9},
b[]={2,3,6,8,10},
c[10];
int *p1=a, *p2=b, i;
for (i=0; i<10; i++)
{
if( *(p1) > *(p2) )
{
c[ i ] = *(p2);
*(p2++);
}
else
{
c[ i ] = *(p1);
*(p1++);
}
}
for (i=0; i<10; i++)
{
printf(" %d",c[i]);
}
printf("\n\n");
return 0;
}
将两个有序的数组合并成一个有序的数组 请问一下大神为什么第一个程序运行不对呢 谢谢大神!
本帖最后由 桃花飞舞 于 2021-6-4 14:35 编辑
怎么两个输出的数据都不正确呢?不过以我愚见 *(p1++);和*(p1) = *(p1+1);是不一样的,怎么说呢 ? 我们先把两个语句的*号去掉,p1++;和 p1=p1+1; 指向数组a的下一个元素的地址即a+1 ==> (unsigned int)a+1*sizeof(*a)然而a它从指针的角度它是指向了数组的第一个元素数组的第一个元素是int类型==>(unsigned int)a+1*sizeof(int)==>(unsigned int)a + 1*4 所以*(p1++)和*(p1+1)就都是数组a的下一个元素。*(p1++);执行时在括号里边先p1++,p1的值为(unsigned int)p1+1*sizeof(*a)==>(unsigned int)p1+1*sizeof(int)==>(unsigned int)p1+1*4。而*(p1) = *(p1+1)执行时根据运算优先级等号左边*(p1)是数组a的当前元素等号右边*(p1+1)是数组a的下一个元素而这时p1的值为(unsigned int)p1且p1值并未改变因为运算符的优先级先运算最后赋值,*(p1=p1+1);这样才是下一个元素。
|
|