我无法理解为什么在下面的 pnArryCpy 中递增指针是不正确的。我想出了如何以不同的方式使用指针表示法复制数组,但我需要了解这有什么问题(例如(* tgt_s)++;
where int (*tgt_s)[cs]
),以及为什么tgt_s
是左值(例如tgt_s++
有效)但*tgt_s
不是(真的)左值。
int main(void)
{
int arr1[2][4] = { {1, 2, 3, 4}, {6, 7, 8, 9} };
int arr2[2][4];
pnArrCpy(4, arr1, arr2, arr2+2); // copies 2d array using pointer notation
// - this is where the problem is.
printarr(2, 4, arr2); // this just prints the array and works fine - not at issue
putchar('\n');
return 0;
}
void pnArrCpy(int cs, int (*src)[cs], int (*tgt_s)[cs], int (*tgt_e)[cs])
{
while (tgt_s < tgt_e)
{
**tgt_s=**src;
(* tgt_s)++; // older versions of gcc warn "target of assignment not really
// an lvalue", latest versions throw an error
(* src)++; // but no errors are runtime
}
return;
}
// trucated rest of program since it's not relevant, just the function for printing
// the array
在较旧的 gcc 下,程序编译并显示正确的结果,即:
1 2 3 4
6 7 8 9
Mac OS 10.8.2
gcc 4.7.2 给了我错误
gcc 4.2.1 只给了我警告
谢谢!!
编辑:我使用可变长度数组的原因:这个函数是另一个程序的一部分,而这个只是我用来排除 pnArrCpy 故障的驱动程序。在实际程序中,数组维度和内容是用户定义的,因此使用 VLA。