这是代码,它用输入数字填充数组并输出。所有这些以前的函数都是使用指针执行的,但是最后一个函数(应该在特定行中打印数字)存在某种错误。它不打印数组的最后一行,因为数组变为3x3排序。有什么问题,我该如何解决?您能对代码本身说些什么。它是灵活,可维护和有用的,还是相反?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int** MAC_ROS(int str,int col);
int* task(int strm,int colm);
int* getNumber(int *p,int colm);
void GET_NUMBER(int *pointer,int col,int rowDestination);
void OUT(int *p,int str,int col);
int *point=NULL;
int arr[20][20];
int main(void){
int col,str,rowDestination;
printf("Input columns="); scanf("%d",&col);
printf("Input strings="); scanf("%d",&str);
point=task(str,col);
printf("rowDestination="); scanf("%d",&rowDestination);
GET_NUMBER(point,col,rowDestination);
}
int* task(int strm,int colm)
{
int *MAS_POINT;
MAS_POINT=(int*)MAC_ROS(strm,colm);
OUT(MAS_POINT,strm,colm);
return MAS_POINT;
}
int** MAC_ROS(int str,int col)
{
int a=0;
int *point,**el;
point=(int*)malloc(col*str*sizeof(int));
el=(int**)point;
for(int i=0;i<str;i++)
{
point=point+str*i;
for(int j=0;j<col;j++)
{
scanf("%d",&a);
*(point+j)=a;
}
}
return el;
}
void OUT(int *p,int str,int col)
{
for(int i=0;i<str;i++)
{
p=p+str*i;
for(int j=0;j<col;j++)
{
printf("%d ",*(p+j));
}
printf("\n");
}
}
void GET_NUMBER(int *pointer,int col,int rowDestination)
{
pointer=pointer+((rowDestination-1)*col);
for(int t=0;t<col;t++)
{
printf("%d ",*(pointer+t));
}
}
答案 0 :(得分:1)
您在OUT
中的代码是:
void OUT(int *p,int str,int col)
{
for(int i=0;i<str;i++)
{
p=p+str*i;
for(int j=0;j<col;j++)
{
printf("%d ",*(p+j));
}
printf("\n");
}
}
要到达下一行,可以将上一行指针添加一行,也可以将更多行添加到原始指针。但是,您需要向原始指针添加越来越多的行,这行不通。
要转到下一行,您需要添加列数。如果数组有8列,则要转到下一行,您需要在上一行中有8列才能跳过该行中的8列。
可能的解决方法:
void OUT(int *op,int str,int col)
{
for(int i=0;i<str;i++)
{
int *p = op + col * i;
for(int j=0;j<col;j++)
{
printf("%d ",*(p+j));
}
printf("\n");
}
}
或者:
void OUT(int *p,int str,int col)
{
for(int i=0;i<str;i++)
{
for(int j=0;j<col;j++)
{
printf("%d ",*(p+j));
}
printf("\n");
p=p+col;
}
}
甚至:
void OUT(int *p,int str,int col)
{
for(int i=0;i<str;i++)
{
for(int j=0;j<col;j++)
{
printf("%d ",*p);
p++;
}
printf("\n");
}
}