user-0 提问: c语言数组元素交换问题，请高手过来看看

回复:
user: user-1
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-2
content: 在SWAP调用那里打断点，看下交换的两个指针位置是否有误。SWAP函数是没有问题的

user: user-1
content: 其实电脑开机后物理内存的每个字节都是可读写的，从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页，一页通常为4KB。

user: user-3
content: 引用 2 楼 zhao4zhong1 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。+1

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:地址不变正常，Binary[j][M]和Binary[j][M+1]的值不在[0,511]范围内就不正常了。 Binary[j][M+1]的值不在[0,511]范围内,但是在上一段代码里： 	for (int k = 0; k < M + 2; k++) 		{ 			printf("%d", Binary[j][k]); 		} 		printf("\n");得到的结果却是正常的，这是为什么呢？？

user: user-1
content: 地址不变正常，Binary[j][M]和Binary[j][M+1]的值不在[0,511]范围内就不正常了。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:printf("before SWAP ARRAYR+%d==%lg,ARRAYR+%d==%lg\n",Binary[j][M],ARRAYR+Binary[j][M],Binary[j][M + 1],ARRAYR+Binary[j][M + 1]); SWAP(ARRAYR+Binary[j][M],ARRAYR+Binary[j][M + 1]);   //运行发现交换结果不符合预期 printf("after SWAP ARRAYR+%d==%lg,ARRAYR+%d==%lg\n",Binary[j][M],ARRAYR+Binary[j][M],Binary[j][M + 1],ARRAYR+Binary[j][M + 1]);  printf("before SWAP ARRAYI+%d==%lg,ARRAYI+%d==%lg\n",Binary[j][M],ARRAYI+Binary[j][M],Binary[j][M + 1],ARRAYI+Binary[j][M + 1]); SWAP(ARRAYI+Binary[j][M],ARRAYI+Binary[j][M + 1]);     //运行发现交换结果不符合预期 printf("after SWAP ARRAYI+%d==%lg,ARRAYI+%d==%lg\n",Binary[j][M],ARRAYI+Binary[j][M],Binary[j][M + 1],ARRAYI+Binary[j][M + 1]); getchar();  交换前后的地址没有改变，这应该是正常的吧

user: user-4
content: 引用 8 楼 qq_22556259 的回复:[quote=引用 7 楼 qq_22556259 的回复:] [quote=引用 6 楼 u012421456 的回复:] [quote=引用 5 楼 u012421456 的回复:] 楼主是想交换ARRAYR和ARRAYI这两个数组的值吗？ 那在调用SWAP函数时，其中的参数不对吧[/quote]  实参不应该是指向数组元素的值吗？？[/quote] 我是要交换同一个数组两个元素的位置[/quote] 那我理解错了

user: user-4
content: SWAP(ARRAYR+Binary[j][M],ARRAYR+Binary[j][M + 1]);  如果是交换两个数组的元素，那不是该ARRAYR和ARRAYI吗

user: user-0
content: 引用 6 楼 u012421456 的回复:[quote=引用 5 楼 u012421456 的回复:] 楼主是想交换ARRAYR和ARRAYI这两个数组的值吗？ 那在调用SWAP函数时，其中的参数不对吧[/quote] 不是交换两个数组的值，而是交换同一个数组指定的两个元素的位置，两个数组都要这么做

user: user-0
content: 引用 7 楼 qq_22556259 的回复:[quote=引用 6 楼 u012421456 的回复:] [quote=引用 5 楼 u012421456 的回复:] 楼主是想交换ARRAYR和ARRAYI这两个数组的值吗？ 那在调用SWAP函数时，其中的参数不对吧[/quote]  实参不应该是指向数组元素的值吗？？[/quote] 我是要交换同一个数组两个元素的位置

user: user-0
content: 引用 6 楼 u012421456 的回复:[quote=引用 5 楼 u012421456 的回复:] 楼主是想交换ARRAYR和ARRAYI这两个数组的值吗？ 那在调用SWAP函数时，其中的参数不对吧[/quote]  实参不应该是指向数组元素的值吗？？

user: user-4
content: 引用 5 楼 u012421456 的回复:楼主是想交换ARRAYR和ARRAYI这两个数组的值吗？ 那在调用SWAP函数时，其中的参数不对吧

user: user-4
content: 楼主是想交换ARRAYR和ARRAYI这两个数组的值吗？ 那在SWAP函数中串的参数不对吧

user: user-1
content: printf("before SWAP ARRAYR+%d==%lg,ARRAYR+%d==%lg\n",Binary[j][M],ARRAYR+Binary[j][M],Binary[j][M + 1],ARRAYR+Binary[j][M + 1]); SWAP(ARRAYR+Binary[j][M],ARRAYR+Binary[j][M + 1]);   //运行发现交换结果不符合预期 printf("after SWAP ARRAYR+%d==%lg,ARRAYR+%d==%lg\n",Binary[j][M],ARRAYR+Binary[j][M],Binary[j][M + 1],ARRAYR+Binary[j][M + 1]);  printf("before SWAP ARRAYI+%d==%lg,ARRAYI+%d==%lg\n",Binary[j][M],ARRAYI+Binary[j][M],Binary[j][M + 1],ARRAYI+Binary[j][M + 1]); SWAP(ARRAYI+Binary[j][M],ARRAYI+Binary[j][M + 1]);     //运行发现交换结果不符合预期 printf("after SWAP ARRAYI+%d==%lg,ARRAYI+%d==%lg\n",Binary[j][M],ARRAYI+Binary[j][M],Binary[j][M + 1],ARRAYI+Binary[j][M + 1]); getchar();

user: user-0
content: 2楼。。。。。我已经看了整整一早上了，就是因为要做别的事情才上来发帖子的