【发布时间】:2021-01-25 07:26:35
【问题描述】:
我正在解决这个问题:
Given an array p[5], write a function to shift it circularly left by two positions. Thus, if p[0] = 15, p[1]= 30, p[2] = 28, p[3]= 19 and p[4] = 61 then after the shift p[0] = 28, p[1] = 19, p[2] = 61, p[3] = 15 and p[4] = 30. Call this function for a (4 x 5 ) matrix and get its rows left shifted.
这是我尝试过的代码:
#include <stdio.h>
#include <stdio.h>
void circularswap(int arr[][5],int n,int m){ int arr1[n][m],i,j;
for (i=0;i<n;i++){
for (j=0;j<m;j++){
arr1[i][j]=*(*(arr+i)+j);
}
}
for (i=0;i<m;i++){
*(*(arr+i)+0)=arr1[i][2];
*(*(arr+i)+1)=arr1[i][3];
*(*(arr+i)+2)=arr1[i][4];
*(*(arr+i)+3)=arr1[i][0];
*(*(arr+i)+4)=arr1[i][1];
}
for (i=0;i<4;i++){
for (j=0;j<5;j++){
printf ("%d",arr[i][j]);
}
printf ("\n");
}
}
int main(){ int i,j;
int arr[4][5]={(15,30,28,19,61),(15,30,28,19,61),(15,30,28,19,61),(15,30,28,19,61)};
circularswap((arr,4,5));
return 0;
}
不幸的是,这会显示警告。有人可以告诉为什么会弹出警告以及如何删除它们吗?
【问题讨论】:
-
“很遗憾,这会显示警告” - 你认为这些警告是什么意思?而且这段代码应该发出比你提到的更多的警告。
-
编辑后的代码请大家看
-
我的道歉@WhozCraig,由于我是编程新手,请您更正代码吗?
-
*(*(arr+i)+j)请忘记这一点。总是写arr[i][j],谢谢!
标签: arrays c function pointers