gpt4 book ai didi

c - 二维数组和指针

转载 作者:行者123 更新时间:2023-11-30 14:45:08 25 4
gpt4 key购买 nike

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

最佳答案

您在 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");
}
}

关于c - 二维数组和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53243449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com