znevegiveup1
唐僧爱吃唐僧肉
采纳率31.7%
2017-04-22 01:59 阅读 2.3k

求大神帮帮忙,小妹感激不尽

按如下函数原型编程从键盘输入一个m行n列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中,m和n的值由用户键盘输入。已知m和n的值都不超过10。
void InputArray(int p, int m, int n);
int FindMax(int *p, int m, int n, int *pRow, int *pCol);
输入提示信息:
"Input m, n:"
"Input %d
%d array:\n"
输入格式:"%d,%d"
输出提示信息和格式:"max = %d, row = %d, col = %d\n"
#include
#define M 10
#define N 10
void InputMatrix(int p, int m, int n);
int FindMax(int *p, int m, int n, int *pRow, int *pCol);
int main()
{              
    int a[M][N], m, n, row, col, max;
    printf("Input m, n:");
    scanf("%d,%d", &m, &n);
    InputMatrix(*a, m, n);
    max = FindMax(*a, m, n, &row, &col);
    printf("max = %d, row = %d, col = %d\n", max, row, col);
    return 0;
}              
/
函数功能:输入m*n矩阵的值 /
void InputMatrix(int *p, int m, int n)
{              
    int i, j;
    printf("Input %d
%d array:\n", m, n);
    for (i = 0; i < m; i++)
    {              
        for (j = 0; j < n; j++)
        {              
            scanf("%d", &p[i * n + j]);
        }
    }
}              
/* 函数功能:在m*n矩阵中查找最大值及其所在的行列号 /
int FindMax(int *p, int m, int n, int *pRow, int *pCol)
{              
    int i, j, max = p[0];
    *pRow = 0;
    *pCol = 0;
    for (i = 0; i < m; i++)
    {              
        for (j = 0; j < n; j++)
        {              
            if (p[i * n + j] > max)
            {              
                max = p[i * n + j];
                *pRow = i;              /
记录行下标*/
                *pCol = j;              /*记录列下标*/
            }
        }
    }
    return max;
}              
那么这边小妹就看不懂了,在输入m*n矩阵的函数中在函数名中定义了一个指针变量p可以直接存储数组吗?指针不一般存储一个数的地址吗?可以存储一个数组的地址吗?
求大神赐教,小妹感激不尽

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • sinat_29830917 Jhone.Yu 2017-04-22 02:43

    发现没回答好~~~从新来哈。

    1、在输入m*n矩阵的函数中在函数名中定义了一个指针变量p可以直接存储数组吗?

    InputMatrix(*a, m, n); *a代表的是二维数组第0行的首地址。

    传入的参数就是个地址昂。

    2、指针不一般存储一个数的地址吗?

    指针就是存储地址的。但是不局限与一个数~ 只有有占用内存空间,指针都可以保存那个空间的地址。

    3、可以存储一个数组的地址吗?

    数组在肯定有占用一块内存,int a[M][N] ---->占用了M*N*sizeof(int)字节的空间。

    指针无法存储数组,可以存储数组中某一个数据的地址 ,比如 int *p = &a[3][2] 。

    你可以自己做个试验:
    int a[3][2] = {1,2,3,4,5,6};
    int *p = *a;
    1、for(i=0;i<2;i++)
    for(j=0;j<2;j++)
    printf(" %d ", a[i][j]);
    printf("\n");

    2、for(i=0;i<6;i++)
    printf(" %d ", *(p+i));
    printf("\n");

    3、for(i = 0;i<6;i++)
    printf(" %d ",*(*a+i));
    printf("\n");

    点赞 1 评论 复制链接分享
  • sinat_29830917 Jhone.Yu 2017-04-22 02:14

    想一下昂,既然都是数据,那在内存肯定要有空间存储这些数据,指针保存的是数据的地址,你觉得数组不占内存空间嘛~

    点赞 评论 复制链接分享
  • lixiaogang_theanswer 君子黎 2017-04-22 02:27
     楼主,二维数组大小都已经确定,因此想要把二维数组的地址发送给函数,可以在函数中定义一个数组指针,如:int (*mPtr)[10],
     同时将二维数组的长度len = sizeof(a)/(sizeofa[0] ;这样就可以在函数中来操作二维数组了。
    
    点赞 评论 复制链接分享

相关推荐