首页 新闻 搜索 专区 学院

C语言利用指针移位,输出有误求解

0
悬赏园豆:5 [已解决问题] 解决于 2021-12-17 10:36

有n行m列个整数,使每一行其前面各数顺序向后移k个位置,每一行最后k个数变成最前面的k个数。要求用指向一维数组的指针变量完成。n、m和k均小于100
【输入说明】
输入包括n+1行数据,第一行三个数字分别表示n,m和k,接下来有n行,每行m个数据。
【输出说明】
每个数字后有一个空格
【输入样例】
2 10 3
1 2 3 4 5 6 7 8 9 0
1 2 3 4 5 6 7 8 9 0
【输出样例】
8 9 0 1 2 3 4 5 6 7
8 9 0 1 2 3 4 5 6 7

#include <stdio.h>
#define M 100
//移动函数。指针p指向n行m列的二维数组
void Move(int (*p)[M],int n,int m,int k)
{
	int i,j,c,b;
	int x[100][100];
	int y[100][100];
	for (i=0;i<n;i++)
    	    for (j=0;j<(m-k);j++)
    		x[i][j]=*(*(p+i)+j);//将需要后移的存储 
	for (i=0;i<n;i++)
		for (c=0,j=(m-k);c<k,j<m;c++,j++)
			y[i][c]=*(*(p+i)+j);//将需要前移的存储 
	for (i=0;i<n;i++)
    	    for (j=0;j<k;j++)
    		*(*(p+i)+j)=y[i][j];//将前移的移过去 
    for (i=0;i<n;i++)
    	for (j=k,b=0;j<n,b<(m-k);j++,b++)
    		*(*(p+i)+j)=x[i][j];//将后移的补上 
	for (i=0;i<n;i++)
	{
    	    for (j=0;j<m;j++)
    	    {
    		printf ("%d ",*(*(p+i)+j));
    	    }
    	printf ("\n");
        }
}
int main()
{
    int n,m,k,i,j;
    int (*q)[100];
    scanf ("%d %d %d",&n,&m,&k);
    int a[100][100];
    q=a;
    for (i=0;i<n;i++)
    	for (j=0;j<m;j++)
    		scanf ("%d",q);//*(*(q+i)+j));
    Move (q,n,m,k);
  return(0);
}

输出只有0,是函数有误吗?该如何改正?求大佬解答原因

wedy1234的主页 wedy1234 | 初学一级 | 园豆:1
提问于:2021-12-16 12:33
< >
分享
最佳答案
0

能不能直接交换某几个指针?
类似于

int *a;
a = *(*(p+i)+0);
 *((p+i)+0) = *(*(p+i)+9);
 *(*(p+i)+9) = a;

借一个变量做置换,我对多维数组的指针忘完了

收获园豆:5
echo_lovely | 小虾三级 |园豆:636 | 2021-12-16 17:05

可以的

wedy1234 | 园豆:1 (初学一级) | 2021-12-16 17:59

@wedy1234: 那你直接交换呗,我确实忘记了多维数组的指针使用,上完数据结构课就不再写了

echo_lovely | 园豆:636 (小虾三级) | 2021-12-17 08:28

@echo_lovely: 已经解决了

wedy1234 | 园豆:1 (初学一级) | 2021-12-17 10:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册