在C语言中等号后一个m自减会作用于等号前的m,假如m=3,那么在C语言中上式子就为A[1]=A[2];而在c#和java中上式子又为A[2]=A[2];
c语言:
![B0Q3)JK(Z~V2Q1{])3IZ_JN.png](https://pic.leetcode.cn/81d5b02628cbe3a8d42a16e6aaac4e29e5b928fa8181b61320ac7140ca57449f-B0Q3)JK(Z~V2Q1%7B%5D)3IZ_JN.png)
C#:

比如leetcode合并排序数字这题,代码相同,测试用例相同,但是输出结果不同,代码如下,感兴趣的可以测试下,另外有没有哪位大佬解释下原因啊
合并两个有序数组
void merge(int* A, int ASize, int m, int* B, int BSize, int n)//C语言
{
while (m > 0 && n > 0) {
// 对比选出较大的数放在 m + n - 1 的位置,并将选出此数的指针向前移动
A[m + n - 1] = A[m - 1] > B[n - 1] ? A[m-- - 1] : B[n-- - 1];
}
// 剩下的数都比已经遍历过的数小
// 如果 m 不为 0,则 A 没遍历完,都已经在 A 中不用再管
// 如果 n 不为 0,则 B 没遍历完,直接全移到 A 中相同的位置
while (n > 0) {
A[n - 1] = B[n - 1];
n--;
}
}
class Solution {
public void merge(int[] A, int m, int[] B, int n) //java语言
{
// 先确保将其中一个数组中的数字遍历完
while (m > 0 && n > 0) {
// 对比选出较大的数放在 m + n - 1 的位置,并将选出此数的指针向前移动
A[m + n - 1] = A[m - 1] > B[n - 1] ? A[m-- - 1] : B[n-- - 1];
}
// 剩下的数都比已经遍历过的数小
// 如果 m 不为 0,则 A 没遍历完,都已经在 A 中不用再管
// 如果 n 不为 0,则 B 没遍历完,直接全移到 A 中相同的位置
while (n > 0) {
A[n - 1] = B[n - 1];
n--;
}
}
}