求助一下大神
本帖最后由 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;
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);
}
printf("\n\n");
return 0;
}
#include <stdio.h>
int main()
{
int a[]={1,3,5,7,9},
b[]={2,3,6,8,10},
c;
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);
}
printf("\n\n");
return 0;
}
将两个有序的数组合并成一个有序的数组 请问一下大神为什么第一个程序运行不对呢 谢谢大神! c是数组,他是一个地址常量 你选择结构中尝试将p1/p2指针中存放的值赋值给常量自然就会报错。
#include <stdio.h>
int main()
{
int a[]={1,3,5,7,9},
b[]={2,4,6,8,10},
c;
int *p1=a, *p2=b, i,j,k;
for (i=0,j=0,k=0; k<10; k++)
{
if(*(p1 + i) > *(p2 + j))
{
*(c + k) = *(p2 + j);
j++;
}
else
{
*(c + k) = *(p1 + i);
i++;
}
}
for (k=0; k<10; k++)
{
printf("%2d ",*(c+k));
}
printf("\n\n");
return 0;
}
数组名是个 指针常量 不能当左值
只是一个标记
当右值时就是指针 万千只cnm 发表于 2021-6-3 19:02
数组名是个 指针常量 不能当左值
只是一个标记
当右值时就是指针
就是*(p1) = *(p1+1);为什么不能持续指向下一个单元元素呢 *(P++)就可以 g1063496360 发表于 2021-6-3 21:15
就是*(p1) = *(p1+1);为什么不能持续指向下一个单元元素呢 *(P++)就可以
你是指那里的 g1063496360 发表于 2021-6-3 21:15
就是*(p1) = *(p1+1);为什么不能持续指向下一个单元元素呢 *(P++)就可以
你 p+1结果是个值呀
p本身没有改变
p +=1 才行 万千只cnm 发表于 2021-6-3 21:27
你 p+1结果是个值呀
p本身没有改变
p +=1 才行
对呀 我把p+1的值 赋值给 p 再进行比较 而且p += 1也是不行的喔 g1063496360 发表于 2021-6-3 21:32
对呀 我把p+1的值 赋值给 p 再进行比较 而且p += 1也是不行的喔
{:5_104:} 本帖最后由 桃花飞舞 于 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);这样才是下一个元素。 桃花飞舞 发表于 2021-6-4 00:24
怎么两个输出的数据都不正确呢?不过以我愚见 *(p1++);和*(p1) = *(p1+1);是不一样的,怎么说呢 ? 我们先把 ...
感谢!
页:
[1]