在C中切换两个数组的内部

tv6aics1  于 2023-05-28  发布在  其他
关注(0)|答案(2)|浏览(135)

我如何交换两个数组的内部?
例如:

a [] = {1,2,3,4}
b [] = {5,6,7,8,9}

a'[]= {5,6,7,8,9}
b'[] = {1,2,3,4}

当然,这些数组需要一个int和bla bla bla,但有没有一个公式可以切换这两个数组?

int main(){

    int a [6] = {1,2,3,4,5};
    int b [6] = {6,7,8,9,10,11};
    int x[7] = {0,0,0,0,0,0,0} ; 
    int i = 0;
    int j = 0;
    int v = 0;
    printf("Array A : ");
    
    while(i<=4){
        printf("%d ",a[i] );
        i++;
    }
    
    printf("\nArray B:");
    
    while (j<=5){ // ofc its not working and was just a thought but ...

        printf("%d ", b[j]);
        j++;
    } 

    int k = 0;
    while (v <= 6){
        a[k] = x[k];
        b[k] = a[k]; 
        x[k] = b[k];
        v++;
        k++;
    }
    
    printf("\nNeues Array A : ");
    int z = 0;
    int l = 0; 
    
    while(z<=4){
        printf("%d ",a[i] );
        z++;
    }
    
    printf("\nNeues Array B:");
    
    while (l<=5){
        printf("%d ", b[j]);
        l++;
    } 
    return 0;
}
1yjd4xko

1yjd4xko1#

在C中交换数组的合理方法通常是 * 不 * 交换实际的数组。
相反,请执行以下操作:

int buf1 [6] = {1,2,3,4,5};
int buf2 [6] = {6,7,8,9,10,11};
int* a = buf1;
int* b = buf2;

然后交换指针:

int* tmp = a;
a = b;
b = tmp;

使用指针的优点是灵活性和性能。我已经记不清自己审阅了多少次实时关键代码,比如一个嵌入式系统中断服务例程,它会填满一些缓冲区。然后,程序员不再只是交换指针,而是暂停整个程序,对缓冲区进行不必要的缓慢硬拷贝。不要复制数据,除非你真的需要。

hl0ma9xz

hl0ma9xz2#

如果内存不是问题,最简单的方法是:

int tmp[6];
memcpy(tmp, a, sizeof(a));
memcpy(a, b, sizeof(a));
memcpy(b, tmp, sizeof(a));

确保所有3个数组的大小相同。

相关问题