为什么c中的数组不交换最后的元素
我不知道这个节目里发生了什么, 我正在使用此函数修改一个由6个元素组成的数组,它应该以这种方式交换元素: ex为什么c中的数组不交换最后的元素,c,arrays,swap,C,Arrays,Swap,我不知道这个节目里发生了什么, 我正在使用此函数修改一个由6个元素组成的数组,它应该以这种方式交换元素: ex数组[6]={1,2,3,4,5,6} 输出: 3 2 1 6 5 4 3 2 1 4 5 6 但是,我得到的是: 输出: 3 2 1 6 5 4 3 2 1 4 5 6 你能告诉我我做错了什么吗 职能: void invert(int*buf){ int i,j,swap; 对于(i=0;i
数组[6]={1,2,3,4,5,6}
输出:
3 2 1 6 5 4
3 2 1 4 5 6
但是,我得到的是:
输出:
3 2 1 6 5 4
3 2 1 4 5 6
你能告诉我我做错了什么吗
职能:
void invert(int*buf){
int i,j,swap;
对于(i=0;i<(3-1);i++)
{
对于(j=0;j<3-i-1;j++)
{
swap=buf[j];
buf[j]=buf[j+1];
buf[j+1]=掉期;
}
}
对于(i=3;i<(6-1);i++)
{
对于(j=3;j<6-i-1;j++)
{
swap=buf[j];
buf[j]=buf[j+1];
buf[j+1]=掉期;
}
}
}
我主要是这样打电话的:
main ( int argc , char * argv [])
{
int k;
int array[6]={1,2,3,4,5,6};
invert(array);
for(k=0;k<6;k++)
{
printf("%d ",array[k]);
}
printf("\n");
}
main(int-argc,char*argv[])
{
int k;
int数组[6]={1,2,3,4,5,6};
反转(阵列);
对于(k=0;kFix
最后一个for循环出现故障。当分配int i=3
时,内部的第二个for循环将永远不会运行,因为3<6-3-1
为false。从上面复制外部循环:
for (int i = 0; i < 2; i++)
{
for (j = 3 ; j < 6 - i - 1; j++)
{
swap = buf[j];
buf[j] = buf[j+1];
buf[j+1] = swap;
}
}
for(int i=0;i<2;i++)
{
对于(j=3;j<6-i-1;j++)
{
swap=buf[j];
buf[j]=buf[j+1];
buf[j+1]=掉期;
}
}
这将产生3 2 1 6 5 4
提议:
我可以补充一点:您甚至可以以更好的方式实现该方法
void invert (int *buf, int len){
for(int i = 0; i < len/2; i++){
int temp = buf[i];
buf[i] = buf[len-i-1];
buf[len-i-1] = temp;
}
}
void invert(int*buf,int len){
对于(int i=0;i
上面的方法将缓冲区完全反转。它被称为:
int main(){
int k;
int a[6] = {1,2,3,4,5,6};
invert(a,3);
invert(a+3, 3);
for(k=0;k<6;k++)
{
printf("%d ",a[k]);
}
printf("\n");
return 0;
}
intmain(){
int k;
int a[6]={1,2,3,4,5,6};
倒置(a,3);
反转(a+3,3);
对于(k=0;k),调试器将告诉您答案。我使用“gcc-o program.c-lm”进行编译,没有错误和警告,您能写出代码的样子吗?没问题!@chang