在二维阵列带指针和常规指针的二维数组? (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
第二种方法也比较冗长,容易搞砸。我无法想象为什么有人会喜欢它,或者它可能有什么优势。你有没有对此有特定的想法? –