c語言函數(shù)調(diào)用二位數(shù)組,數(shù)組中位數(shù) C語言

C語言函數(shù)調(diào)用二維數(shù)組,指針問題

正如

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ì)多維指針的問題,樓主可以自己類推一下

c語言二位數(shù)組操作

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

}

C語言二維數(shù)組的函數(shù)調(diào)用

函數(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)試了一下,大概就這樣吧

c語言二維數(shù)組怎么用函數(shù)一個(gè)一個(gè)調(diào)用,這樣對(duì)嗎

對(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)

小程序開發(fā)