#include <stdio.h>
int main() {
int a[3][3];
int i,j;
int *p;
int o;
p = *a;
printf("请输入:");
for (i = 0; i < 9; p++&&i++) {
scanf_s("%d", p);
}
for (i = 0; i < 9; p-- && i++) {
printf(" %d", *(p-1));
}
printf("\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf(" %d", a[i][j]);
}
}
printf("\n");
for (p = *a, i = 0; i<8; p++)
{
if (*p <= *(p + 1)) {//报错从这里开始
o = *p;
*p = *(p + 1);
*(p + 1) = o;
}
}
for (i = 0,p=*a; i < 9; p++ && i++) {
printf(" %d", *(p ));
}
return 0;
}
p++&&i++
这样会造成短路
应该写
p++,i++
for (p = *a, i = 0; i<8; p++)
这里应该是
for (p = *a, i = 0; i<8; p++,i++)
如果你要冒泡排序,应该双循环,你这样排序不起来,只是其中一趟
报错的本质为内存访问问题:
表现有:
先等
数组越界
对于分配到的空间,未进行预处理
空指针,指针越界(本文正是这个问题)
解决方式:
&&改成,
【以下回答由 GPT 生成】
答案:
错误的原因是在代码的以下两个地方:
for循环中的 p++ & i++
和 p-- & i++
。这是一个语法错误,应该使用逗号表达式来同时增加 p
和 i
的值,而不是使用 &
操作符。正确的写法是 p++, i++
和 p--, i++
。
最后一个for循环中的语句 p++ && i++
。 该语句使用了 &&
运算符,但这并不是正确的语法,应该使用逗号表达式来同时增加 p
和 i
的值。正确的写法是 p++, i++
。
修正后的代码如下:
#include <stdio.h>
int main() {
int a[3][3];
int i,j;
int *p;
int o;
p = *a;
printf("请输入:");
for (i = 0; i < 9; p++, i++) {
scanf_s("%d", p);
}
for (i = 0; i < 9; p--, i++) {
printf(" %d", *(p-1));
}
printf("\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf(" %d", a[i][j]);
}
}
printf("\n");
for (p = *a, i = 0; i<8; p++ ) {
if (*p <= *(p + 1)) {
o = *p;
*p = *(p + 1);
*(p + 1) = o;
}
}
for (i = 0,p=*a; i < 9; p++, i++) {
printf(" %d", *(p ));
}
return 0;
}
请注意,上述修复只是修复了语法错误,并没有修改程序的主要逻辑。如果程序的目标是正确排序数组,还需要进一步修改代码以实现此目标。
【相关推荐】