Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么c中的数组不交换最后的元素_C_Arrays_Swap - Fatal编程技术网

为什么c中的数组不交换最后的元素

为什么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个元素组成的数组,它应该以这种方式交换元素:

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<(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