C 語言中關於通過形參傳遞陣列的長度計算的一些思考

2021-09-29 20:16:36 字數 1664 閱讀 8650

學習 c 語言的過程中,計算陣列的長度經常會碰到。在字元型的陣列中我們可以使用 strlen() 來獲取當前陣列的長度,對於其他型別的陣列,這個方法就不適用了。由於經常會遇到計算陣列長度的問題,經過思考,考慮通過乙個函式來實現陣列長度的計算。思路是這樣的:通過形參將陣列傳遞給長度計算函式,長度計算函式計算完成之後返回陣列長度。但是在實際實踐過程中遇到了問題,請繼續往下看!

根據以上構想,寫了如下一段 demo:

# include

intmain

(int argc,

char

* ar**)

;// int length(int *);

intlength

(int

);printf

("the length of this array is: %d\n"

,length

(a))

;printf

("the length of this array is: %d\n"

,sizeof a /

sizeof a[0]

);return0;

}// int length(int *a)

intlength

(int a)

執行結果:

the length of this array is:

2the length of this array is:

5

a 是長度計算的形式引數,在 main() 函式中呼叫時,a 是乙個指向陣列第乙個元素的指標。在執行 main() 函式時,不知道 a 所表示的位址有多大的資料儲存空間,只是告訴函式:乙個資料儲存空間首位址。

sizeof a 的結果是指標變數 a 佔記憶體的大小,一般在 64 位機上是8個位元組。a[0] 是 int 型別,sizeof a[0] 是4個位元組,結果是2。為此,我們再來看一下下面一段**:

# include

intmain

(int argc,

char

* ar**)

;// int length(int *);

intlength

(int

);int*p;

p = a;

printf

("the length of this array is: %d\n"

,length

(a))

;printf

("the length of this array is: %d\n"

,sizeof a /

sizeof a[0]

);printf

("the length of this pointer is: %d\n"

,sizeof p)

;return0;

}// int length(int *a)

intlength

(int a)

執行結果:

the length of this array is:

2the length of this array is:

5the length of this pointer is:

8

C語言陣列作為形參傳遞,關於sizeof的乙個錯誤

今天覆習排序演算法時用c語言實現,出現乙個問題。void insertsort int a a j 1 cur return 排序結果只有前兩個數字正確,後面的沒有改變。原因是 sizeof a sizeof int 在函式內使用錯誤。a是函式引數,到了本函式中,a只是乙個指標 位址,系統在本函式執...

C 陣列形參的傳遞

陣列有兩個特性 傳參的方法 當下有乙個陣列int j 2 我們自寫了乙個函式void findsomeone 要求將陣列引數傳進去。有以下兩種方式 在函式內部使用時,point 即可實現指標的移動 陣列大小 陣列是以指標的形式傳遞給函式的,所以函式並不知道陣列的確切尺寸,因此呼叫者應該為此提供一些資...

C 函式引數傳遞 陣列形參

1 三種傳遞陣列的寫法 下面這三種寫法本質是一樣的 void fun1 int x,size t size void fun2 int x,size t size void fun3 int 10 x,size t size 這個10其實是沒用的,編譯器會忽略掉 2 形參的長度會引起誤解 3 陣列實...