我實際上正在嘗試使用雙維數組的字符串(它實際上可能是三維的),以交換數組的兩個「單元」。C - 數組內容交換
之前,我用的memcpy但是當談到長字符串,來執行時間長,所以我認爲這是可能簡單地交換陣列的指針,但我不知道該怎麼辦:(
這裏是我的代碼:
#include <stdio.h>
#include <stdlib.h>
void fonction(unsigned char*** tab);
int main()
{
unsigned char*** tab;
tab = malloc(sizeof(unsigned char**) * 3);
if (tab == NULL)
exit(0);
for (int line = 0; line < 3; line++)
tab[line] = malloc(sizeof(unsigned char*) * 3);
for (int line = 0; line < 3; line++)
for (int column = 0; column < 3; column++)
tab[line][column] = malloc(sizeof(unsigned char) * 5);
for (int line = 0; line < 3; line++)
for (int column = 0; column < 3; column++)
for (int cell = 0;cell < 5;cell++)
tab[line][column][cell] = line * 3 * 5 + column * 5 + cell;
for (int i = 0;i < 32;i++)
fonction(tab);
for (int line = 0; line < 3; line++)
for (int column = 0; column < 3; column++)
free(tab[line][column]);
for (int line = 0; line < 3; line++)
free(tab[line]);
free(tab);
return 0;
}
void fonction(unsigned char*** tab)
{
unsigned char temp[5] = { 0, 0, 0, 0, 0 };
int alea = 0;
int alea2 = 0;
int alea3 = 0;
int alea4 = 0;
srand(58);
for (int line = 0; line < 3; line++)
{
for (int column = 0; column < 3; column++)
{
alea = rand() % 3;
alea2 = rand() % 3;
alea3 = rand() % 3;
alea4 = rand() % 3;
*temp = tab[alea][alea2];
tab[alea][alea2] = tab[alea3][alea4];
tab[alea3][alea4] = *temp;
}
}
}
錯誤來釋放標籤時,這是可預期的,因爲fonction做任何舊事物:)
提前感謝!
在你的代碼中沒有2D /二維(或任何其他X維)數組,也沒有任何可指向one.A指針是不是一個數組。作爲一個三星('***')的C程序員並不是一個恭維。這是一個糟糕的界面設計的信號。 – Olaf