c++中如何解决函数调用二维数组的问题

c++中如何解决函数调用二维数组的问题,第1张

可否再把问题描述清楚一些。

#include <iostream>
using namespace std;
int func(int a, int rowlen, int length) {
    for (int i=0;i<length;i++) {
        printf("%d ", (a+i));
    }
    printf("\n");
    for (int j=0;j<length/rowlen;j++) {
        for (int k=0;k<rowlen;k++) {
            printf("%d ", a[jrowlen+k]);
        }
    }
    return 0;
}
int main() {
    int aa[2][3] = {{1,3,2},{7,6,9}};
    printf("result=%d\n", func((int)aa, 3, sizeof(aa)/sizeof(int)));
    return 0;
}

void get_val(int array[][200], int m, int n, int max, int min)
{
int i, j;
for(max = array[0][0], min= array[0][0], j = 0; j < m; j++){
for(i = 0; i < n; i++){
if(max < array[j][i]){
max = array[j][i];
}
if(min > array[j][i]){
min = array[j][i];
}
}
}
}
int main(int argc, char argv[])
{
int array_test[100][200];
int j, i, max, min;

for(j = 0; j < 100; j++){
for(i = 0; i < 200; i++){
array_test[j][i] = ij;
}
}
get_val(array_test, 100, 200, &max, &min);
printf("max:%d,min:%d\n",max,min);

}
编译通过并通过测试,另外还可以通过指针传递:
void get_val(int array, int m, int n, int max, int min)
{
int i, j;
for(max = array, min= array, j = 0; j < m; j++){
for(i = 0; i < n; i++){
if(max < (array+jn+i)){
max = (array+jn+i);
}
if(min > (array+jn+i)){
min = (array+jn+i);
}
}
}
}
另外,虚机团上产品团购,超级便宜

对的,是我的第二种方法。
1可以用指针。
void Func(int array, int m, int n);
在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为:
((int)array + ni + j);
2可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,如:
void Func(int array[3][10]);
void Func(int array[][10]);
二者都是合法而且等价,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:
void Func(int array[][]);
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列,如果在形参中不说明列数,则系统无法决定应为多少行多 少列,不能只指定一维而不指定第二维,下面写法是错误的:
void Func(int array[3][]);
实参数组维数可以大于形参数组,例如实参数组定义为:
void Func(int array[3][10]);
而形参数组定义为:
int array[5][10];
这时形参数组只取实参数组的一部分,其余部分不起作用。

传地址进去就好int a5;
a就是地址;
#include<stdioh>
void output(int a)
{
int i;
for(i=0;i<5;i++)
{
a[i]=i;
}
}
int main()
{
int a[5],j;
output(a);
for(j=0;j<5;j++)
{
printf("%d",a[j]);
}
}

int a[][5];这个只是个指针,不是实体
你在main里顶一个数组就好了
int a[5][5];
用这种Input_sz(a);调用
你主函数中少分号。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13392129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-27
下一篇 2023-07-27

发表评论

登录后才能评论

评论列表(0条)

保存