二维数组和指针

时间:2018-11-10 21:12:07

标签: c

这是代码,它用输入数字填充数组并输出。所有这些以前的函数都是使用指针执行的,但是最后一个函数(应该在特定行中打印数字)存在某种错误。它不打印数组的最后一行,因为数组变为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));
  }
}

1 个答案:

答案 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");
  }
}