重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言中函数不能直接返回一个二维数组。但是可以通过其他方法实现类似功能:
创新互联是一家集网站建设,赵县企业网站建设,赵县品牌网站建设,网站定制,赵县网站建设报价,网络营销,网络优化,赵县网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
1、把二维数组定义为全局变量 这样可以直接在另一个函数中调用
2、把二维数组作为指针传入到第一个函数中 然后同样作为指针传到另一个函数中
3、动态分配内存 在赋值函数中动态分配 并用返回值返回,在另一个函数中进行访问
#includestdio.h
void main(void)
{
int b[100] = ; /*用于计数的数组,数值为x的由b[x-1]显示*/
int max , *p ,num = 0,k1,Line = 0;
int i ,j ,k ,c[5] = ; /*c数组保存前五个数量最多的数字,p用于后面的出现多个相同的频数的数组*/
for(Line = 0 ; Line =900;Line+=100)
{
for( i = Line ;i100+Line ; i++)
for( j = 0 ; j 10 ; j++ )
b[ a[i][j] ]++; /*计数*/
/*下面找寻频率最高的5个数据,对b数组进行排序可以,不过排序后不再知道其原来的数据,要完成这个操作有两条路,一个是牺牲内存,即创造另外一个数组,进行排序,花费内存与b数组相同;二是多花时间,进行多次遍历搜索,下面采用第二种*/
for(j = 0; j5;j++)
for(i = 0 ; i 100 ; i++ )
{
max = 1;
k = 0;
if( max b[i] i!= lookup(i,c) ) max = b[i];/*lookup()函数的用法可以看一看*/
else if(max == b[i] ) k1++; /*当前最大值的数目自增*/
}
c[j] = max; /*保存第k大的元素*/
if(k1 != 0)
{ /*这里处理有相同的频率的几个数,我就不写了,内容是把这几个数都保存下来*/
j += k;
}
if(k + j 4) break; /*最大的五个元素没有找到,楼主的题意有些没理清除,我认为是重新开始计数没错,这个所谓的求有多少次就是这个道理,寻找符合条件的,如果100行内前五中第五名有并列的(当然有可能是三个第四名之类),就不再进行后面的是否这五个元素均存在的判断了*/
else if(k + j == 4 )
{
for(k1 = 0 ; k1 5 ; k1++ )
if( find(c[k1],a[i+Line],10) ) ; /*原型find(int x,int y[],int z),在y数组中寻找与x值相同的元素,y数组大小为z,这个应该不是难点,寻找到则返回非零值,否则返回0值*/
else break;
if(k1 == 5) num++; /*全部五个元素均找到,次数增加1*/
}
}
}
printf("次数为%d",num);
}
1、函数不能返回一个数组,只能返回一个变量,或地址
。如果你想直接返回一个二维数组,这是做不到的。可以用下面的方法
,先建一个结构体。struct
array{int
a[3][3];};
array
solve(){array
a;return
a;}
通过这种方法,来得到二维数组。
2、数组在作为函数返回值或者函数参数时,实际上只作为指针来返回或者传递的。因此返回值用指针数据类型。比如下面的代码:int
g_a[4]
=
{1,2,3,4};
int
*
retn_arrary()
//返回值用指针类型即要。
{
return
g_a;
}
你这个二维数组要动态分配的才行,不然存储周期只在他的函数里面有效
如果是在main中动态获得数组的值,那么,最好在main里面创建数组,然后把数组传给fun进行修改,等fun返回以后,main获得的就是修改后的数组了。
void func(char array[1000][4])
{
array[5][2] = 100;
}
main()
{
char arr[1000][4];
fun(arr);
}
你本身传递的就是数组,并不需要返回数组,直接在你的函数内更改二维数组的值的就行了(注意,如果在是函数内创建的数组,再返回会有问题,出了函数这个变量就无效了),比如如下
#includestdio.h
void fun(int (*pIntPtr)[4]) {
*(*pIntPtr + 0)=20;//将a[0][0]改为20
*(*(pIntPtr+3) + 2)=30;//将a[3][2]改为30
}
int main() {
int A[4][4] = {{10,2,3,1},{12,4,5,1},{14,7,8,1},{15,9,2,1}};
int i,j;
fun(A);
for(i=0;i4;i++)
{
for(j=0;j4;j++) printf("%4d",A[i][j]);
printf("\n");
}
}