资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

c语言函数调用二位数组,数组中位数 C语言

C语言函数调用二维数组,指针问题

正如

10年积累的网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有太仆寺免费网站建设让你可以放心的选择与我们合作。

楼下

所言

int

**p

,定义的p是一个指向int*型的

指针

int

(*p)[10]是一个指向

数组

的指针

数组长度为10

假如定义成

deal(int

**p),传

参数

时要加强制类型转换:

deal((int**)a);

并且使用p时不能用

下标

,p[2][3]是错误的,因为不知道p指向的int*型的长度,无法编译成*(p+2*10+3)

必须自己写成*(p+2*10+3)来调用

假如定义成

deal(int

(*p)[10])就不一样了,

编译器

就能知道p是一个指向长度为10的数组的指针

那么p[2][3]就能编译成*(p+2*10+3)了

总之,C语言是很灵活的,不同的定义

方式

配上不同的

用法

,都是能得到正确的结果的

不知道这么说楼主明白了没?

同样的还有

多维数组

对多维指针的问题,楼主可以自己类推一下

c语言二位数组操作

#include stdio.h

#include time.h

#define N 5

void print(int A[N][N])

{

int i, j;

for (i = 0; i N; i++)

{

for (j = 0; j N; j++)

printf("%4d ", A[i][j]);

printf("\n");

}

}

void find(int A[N][N])

{

int i, j;

int mini = 0, minj = 0, maxi = 0, maxj = 0;

for (i = 0; i N; i++)

for (j = 0; j N; j++)

{

if (A[i][j] A[maxi][maxj])

{

maxi = i;

maxj = j;

}

if (A[i][j] A[mini][minj])

{

mini = i;

minj = j;

}

}

printf("最大值%d, 行号 %d, 列号 %d\n", A[maxi][maxj], maxi, maxj);

printf("最小值%d, 行号 %d, 列号 %d\n", A[mini][minj], mini, minj);

}

void sort(int A[N][N])

{

int b[N * N], t;

int i, j, k = 0;

for (i = 0; i N; i++)

for (j = 0; j N; j++)

b[k++] = A[i][j];

for (i = 0; i N * N - 1; i++)

for (j = 0; j N * N - 1 - i; j++)

if (b[j] b[j + 1])

{

t = b[j];

b[j] = b[j + 1];

b[j + 1] = t;

}

k = 0;

for (i = 0; i N; i++)

for (j = 0; j N; j++)

A[i][j] = b[k++];

}

int main()

{

int A[N][N];

int i, j;

srand(time(NULL));

for (i = 0; i N; i++)

for (j = 0; j N; j++)

A[i][j] = rand() % 1000;

print(A);

find(A);

sort(A);

print(A);

return 0;

}

C语言二维数组的函数调用

函数调用不能这么用,第36行。C标准里面返回值是不能直接返回一个数组的,只能返回数组的首地址。输出学生成绩和每科成绩那个函数,你可以定义一个全局变量数组,还有求平均值最好用float 或者double,用int会造成精度流失。帮你调试了一下,大概就这样吧

c语言二维数组怎么用函数一个一个调用,这样对吗

对的,是我的第二种方法。

1.可以用指针。

void

Func(int

**array,

int

m,

int

n);

在转变后的函数中,array[i][j]这样的式子是不对的(不信,大家可以试一下),因为编译器不能正确的为它寻址,所以我们需要模仿编译器的行为把array[i][j]这样的式子手工转变为:

*((int*)array

+

n*i

+

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];

这时形参数组只取实参数组的一部分,其余部分不起作用。


标题名称:c语言函数调用二位数组,数组中位数 C语言
标题路径:http://cdkjz.cn/article/hcihsp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

业务热线:400-028-6601 / 大客户专线   成都:13518219792   座机:028-86922220