簡體   English   中英

指定指針的指針

[英]Assigning pointers to pointers

我有指向char set指針的指針:

    char **A;
    char **B;

我正在使用Radix-Sort進行字符串排序,我必須對它進行排序幾次,但如果我對它進行排序,它只是對數組A排序並將結果保存在數組B 我想要做的是將A分配給B ,這已經是幾乎已經排序的A ,但是當我這樣做時:

    A = B;

我只是設置了指針,對嗎? 這意味着A現在在點B 而且,當我稍后重新分配值時,我有多個相同字符串的結果。 例如:

    A = {"aa", "ba", "bc", "bd"};

排序並使用A = B ,輸出如下:

    B = {"aa", "aa", "bc", "bd"};

我使用也嘗試過memcpy() -這應該復制什么B由指示的點的地方來A ,對不對? 但結果是一樣的。 不知道如何讓這個工作。 不確定是否在這里發布完整代碼,所以我將它上傳到pastebin上

在此先感謝您的幫助。

編輯2:有點幫助,改變了它,它與memcpy()工作正常,但它仍然沒有'穩定'排序,而不是B = {"bb", "bc"}我有相反的結果: B = {"bc", "bb"} 我還在打架,但還沒有結果......

void CSort(int p){

int k = 123;
int C[k];
int i;

for(i = 0; i <= k; i++){
    C[i] = 0;
}

for(i = 0; i < ILE; i++){
    C[(int)As[i][p]]++;
}

for(i = 1; i <= k; i++){
    C[i] = C[i] + C[i - 1];
}

for(i = 0; i < ILE; i++){     // ile means how many words there are
    Bs[C[(int)As[i][p]] - 1] = As[i];
    printf("As[%i][%i] == %c ", i, p, As[i][p]);
    printf("C[%i] == %i ", (int)As[i][p], C[(int)As[i][p]]-1);
    printf("  Bs[%i]  == %s \n", C[(int)As[i][p]] - 1, Bs[C[(int)As[i][p]] - 1]);

    //(As[i], Bs[C[(int)As[i][p]]], sizeof(As[i]));
    C[(int)As[i][p]]--;
}


}

這是我的Counting Sort,這是我的基數:

void RSort(int d){
    int i;
    for(i = d; i >= 0; i--){
        CSort(i);
        memcpy(As, Bs, sizeof(*As) * ILE);
    }
}

我甚至沒有想法 - 為什么 - 因為在紙上,它工作得很好!

要解決我的問題,我必須做的就是在最后一個循環中改變順序:

for(i = 0; i < ILE; i++)

改成

for(i = ILE - 1; i >= 0; i--)

一切正常!

當你分配

 A = B;

你指定A指向相同的存儲器B指向,而不指向A指向B

為了復制數組,您需要分配內存來保存它並將所有內容從B記憶到A

char ** A = malloc(sizeof(*A) * numitems);
memcpy(A, B, sizeof(*A) * numitems);

然后,如果您對AB排序,它將不會影響另一個,因為您有副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM