正如
10年積累的網(wǎng)站建設(shè)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有太仆寺免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
樓下
所言
int
**p
,定義的p是一個(gè)指向int*型的
指針
int
(*p)[10]是一個(gè)指向
數(shù)組
的指針
數(shù)組長度為10
假如定義成
deal(int
**p),傳
參數(shù)
時(shí)要加強(qiáng)制類型轉(zhuǎn)換:
deal((int**)a);
并且使用p時(shí)不能用
下標(biāo)
,p[2][3]是錯(cuò)誤的,因?yàn)椴恢纏指向的int*型的長度,無法編譯成*(p+2*10+3)
必須自己寫成*(p+2*10+3)來調(diào)用
假如定義成
deal(int
(*p)[10])就不一樣了,
編譯器
就能知道p是一個(gè)指向長度為10的數(shù)組的指針
那么p[2][3]就能編譯成*(p+2*10+3)了
總之,C語言是很靈活的,不同的定義
方式
配上不同的
用法
,都是能得到正確的結(jié)果的
不知道這么說樓主明白了沒?
同樣的還有
多維數(shù)組
對(duì)多維指針的問題,樓主可以自己類推一下
#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, 行號(hào) %d, 列號(hào) %d\n", A[maxi][maxj], maxi, maxj);
printf("最小值%d, 行號(hào) %d, 列號(hào) %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;
}
函數(shù)調(diào)用不能這么用,第36行。C標(biāo)準(zhǔn)里面返回值是不能直接返回一個(gè)數(shù)組的,只能返回?cái)?shù)組的首地址。輸出學(xué)生成績(jī)和每科成績(jī)那個(gè)函數(shù),你可以定義一個(gè)全局變量數(shù)組,還有求平均值最好用float 或者double,用int會(huì)造成精度流失。幫你調(diào)試了一下,大概就這樣吧
對(duì)的,是我的第二種方法。
1.可以用指針。
void
Func(int
**array,
int
m,
int
n);
在轉(zhuǎn)變后的函數(shù)中,array[i][j]這樣的式子是不對(duì)的(不信,大家可以試一下),因?yàn)榫幾g器不能正確的為它尋址,所以我們需要模仿編譯器的行為把a(bǔ)rray[i][j]這樣的式子手工轉(zhuǎn)變?yōu)椋?/p>
*((int*)array
+
n*i
+
j);
2.可以用二維數(shù)組名作為實(shí)參或者形參,在被調(diào)用函數(shù)中對(duì)形參數(shù)組定義時(shí)可以指定所有維數(shù)的大小,也可以省略第一維的大小說明,如:
void
Func(int
array[3][10]);
void
Func(int
array[][10]);
二者都是合法而且等價(jià),但是不能把第二維或者更高維的大小省略,如下面的定義是不合法的:
void
Func(int
array[][]);
因?yàn)閺膶?shí)參傳遞來的是數(shù)組的起始地址,在內(nèi)存中按數(shù)組排列規(guī)則存放(按行存放),而并不區(qū)分行和列,如果在形參中不說明列數(shù),則系統(tǒng)無法決定應(yīng)為多少行多
少列,不能只指定一維而不指定第二維,下面寫法是錯(cuò)誤的:
void
Func(int
array[3][]);
實(shí)參數(shù)組維數(shù)可以大于形參數(shù)組,例如實(shí)參數(shù)組定義為:
void
Func(int
array[3][10]);
而形參數(shù)組定義為:
int
array[5][10];
這時(shí)形參數(shù)組只取實(shí)參數(shù)組的一部分,其余部分不起作用。
文章標(biāo)題:c語言函數(shù)調(diào)用二位數(shù)組,數(shù)組中位數(shù) C語言
文章起源:http://muchs.cn/article38/hcihsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、定制開發(fā)、網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)