C語(yǔ)言循環(huán)中獲取之前變量的值

admin2024-06-21  14

獲取上個(gè)數組變量的值

#include <stdio.h>
#include <string.h>

enum { GG, DD };
int main() {
    int bi[] = {0, 0};
    int bi_s1[] = {0, 0};
    for (int i = 0; i < 5; i++) {
        memcpy(bi_s1, bi, sizeof(bi));
        bi[GG] = i * 3;
        bi[DD] = i * 2;
        printf("bigg = %d, bigg_s1 = %d\n", bi[GG], bi_s1[GG]);
    }
    return 0;
}

如果不想用memcpy進(jìn)行拷貝賦值,可以使用一個(gè)額外的變量來(lái)存儲上一次迭代的數組的索引,利用這個(gè)索引交替訪(fǎng)問(wèn)兩個(gè)數組。

#include <stdio.h>

enum { GG, DD };
int main() {
    int bi[2][2] = {{0, 0}, {0, 0}};
    int current = 0; // 當前正在使用的數組索引

    for (int i = 0; i < 5; i++) {
        int previous = (current + 1) % 2; // 計算上一個(gè)數組的索引
        // 更新當前數組的值
        bi[current][GG] = i * 3;
        bi[current][DD] = i * 2;
        // 輸出當前數組和上一個(gè)數組的內容
        printf("bigg = %d, bigg_s1 = %d\n", bi[current][GG], bi[previous][GG]);
        // 切換到下一個(gè)數組
        current = previous;
    }
    return 0;
}

在這個(gè)實(shí)現中,我們使用了一個(gè)二維數組bi[2][2],其中bi[0]bi[1]分別表示兩個(gè)數組。current變量用于指示當前正在使用的數組的索引,而previous變量則計算上一個(gè)數組的索引,以便在打印時(shí)使用。

輸出結果將顯示每次迭代中當前數組的值和上一次迭代中的數組的值,效果類(lèi)似于使用memcpy復制數組的情況,但避免了內存復制的開(kāi)銷(xiāo)。

這種方法更高效,因為它只使用了一個(gè)額外的整數變量來(lái)存儲索引,而不需要進(jìn)行數組內容的復制。

經(jīng)測試,性能可以快5倍左右。

如果還要獲取更前面的值,可以這樣寫(xiě):

#include <stdio.h>

enum { GG, DD };
int main() {
    int bi[4][2] = {{0, 0}, {0, 0}, {0, 0}, {0, 0}};
    int current = 0;
    int s1, s2, s3;

    for (int i = 1; i <= 10; i++) {
        s1 = (current + 1) % 4; // 上個(gè)值的索引 索引%元素數量 實(shí)現循環(huán)索引
        s2 = (current + 2) % 4; // 上上個(gè)值的索引
        s3 = (current + 3) % 4; // 上上上個(gè)值的索引

        bi[current][GG] = i * 3;
        bi[current][DD] = i * 2;

        printf("%d %d %d %d \n", current, s1, s2, s3);
        printf("s = %d, s1 = %d, s2 = %d s3 = %d \n\n", bi[current][GG], bi[s1][GG], bi[s2][GG], bi[s3][GG]);

        current = s3; // 把最后一個(gè)賦值給current
    }
    return 0;
}
本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲空間服務(wù),不擁有所有權,不承擔相關(guān)法律責任。如若轉載,請注明原文出處。如若內容造成侵權/違法違規/事實(shí)不符,請聯(lián)系SD編程學(xué)習網(wǎng):675289112@qq.com進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!
一级毛片在线一区二区-亚洲精品无码专区土豆网在线播放-亚洲无乱码一区二区三区-亚洲一区二区三区精品