在二維陣列帶指針和常規指針的二維數組? (C語言)
arr[a][b] = *((int *)arr + a * numberOfColumns + b))
如果你還沒有見過這個,添加 工作原理如下標量的指針運算:
前)(3*2 + 2)
將增加8
這相當於&(arr[8])
- (儘管它必須寫爲(3*2 + 2)
)
第二種方法比第一種方法有什麼優點嗎?
使用x[a][b]
方法編碼:
void SortHand(int arr[][2]);
void main()
{
int firstArray[5][2] = { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } };
SortHand(firstArray);
printf("%d", firstArray[3][0]);
while (!_kbhit());
}
void SortHand(int firstArray[][2])
{
firstArray[3][0] = 14;
}
使用*((int *)arr + a * numberOfColumns + b))
方法代碼
void SortHand(int *arr[]);
void main()
{
int numberOfColumns = 2;
int arr[][2] = { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } };
SortHand((int **)arr);
printf("Number: %d", *((int *)arr + 3 * numberOfColumns + 0));
while (!_kbhit());
}
void SortHand(int *arr[])
{
int numberOfColumns = 2;
int rowNumber = 3;
int columnNumber = 0;
*((int *)arr + 3 * numberOfColumns + 0) = 14;
}
在第二種方法中需要這些轉換的事實很好地表明您聲明的類型是錯誤的。 – interjay
第二種方法顯然不太可讀,恕我直言。 – Barmar
第二種方法也比較冗長,容易搞砸。我無法想象爲什麼有人會喜歡它,或者它可能有什麼優勢。你有沒有對此有特定的想法? –