C語言中,定義數(shù)組后可以用sizeof命令獲得數(shù)組的長度(即可容納元素個(gè)數(shù))。但是通過傳遞數(shù)組名參數(shù)到子函數(shù)中,以獲得數(shù)組長度是不可行的,因?yàn)樵谧雍瘮?shù)當(dāng)中,數(shù)組名會(huì)退化為一個(gè)指針。
創(chuàng)新互聯(lián)主營蕪湖網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app開發(fā)定制,蕪湖h5微信平臺(tái)小程序開發(fā)搭建,蕪湖網(wǎng)站營銷推廣歡迎蕪湖等地區(qū)企業(yè)咨詢
堆區(qū)的數(shù)組,堆區(qū)的數(shù)組是自己申請的,比如用new申請空間:int* arr = new int[10],堆區(qū)的數(shù)組不能計(jì)算出包含元素個(gè)數(shù)。棧區(qū)的數(shù)組,棧區(qū)的數(shù)組是系統(tǒng)自動(dòng)分配的。
int GetLength(int[] arr){return sizeof(arr) / sizeof(int); //就是用sizeof計(jì)算出來的數(shù)組長度 除以 數(shù)據(jù)類型的長度。
void main(){ int j;char s[5]={1,2,3,4,\0}; /*把字符依次賦值給數(shù)組中的每個(gè)元素,數(shù)組并不會(huì)自動(dòng)在末尾加上\0,所以要手動(dòng)加上\0。
1、如果這樣定義,每一行還是20個(gè)數(shù),后面的自動(dòng)補(bǔ)為0了,所以根據(jù)這個(gè)數(shù)組不能求得每一行的元素個(gè)數(shù)。樓主可以在這個(gè)數(shù)組每一行再添加一個(gè)特殊的數(shù)字作為標(biāo)志位。
2、main里面第一行,a[10]就表示分配了10個(gè)元素的空間,所以a的size是10個(gè)int,故結(jié)果為10。所以就第一行改為a[5]或者a[]就可以了。估計(jì)你想要的是a[]這種,根據(jù)你列表里的元素個(gè)數(shù),自動(dòng)分配。
3、但是通過傳遞數(shù)組名參數(shù)到子函數(shù)中,以獲得數(shù)組長度是不可行的,因?yàn)樵谧雍瘮?shù)當(dāng)中,數(shù)組名會(huì)退化為一個(gè)指針。C語言是一門通用計(jì)算機(jī)編程語言,應(yīng)用廣泛。
4、也就是說,未定義的數(shù)組會(huì)隨機(jī)取得1個(gè)值,所以在不定值中判斷是不是存在有效元素是不可取的。C語言中,數(shù)組沒有默許值,也就是說,未定義的數(shù)組會(huì)隨機(jī)取得1個(gè)值,所以在不定值中判斷是不是存在有效元素是不可取的。
如果這樣定義,每一行還是20個(gè)數(shù),后面的自動(dòng)補(bǔ)為0了,所以根據(jù)這個(gè)數(shù)組不能求得每一行的元素個(gè)數(shù)。樓主可以在這個(gè)數(shù)組每一行再添加一個(gè)特殊的數(shù)字作為標(biāo)志位。
int strlen(char s[]);void main(){ int j;char s[5]={1,2,3,4,\0}; /*把字符依次賦值給數(shù)組中的每個(gè)元素,數(shù)組并不會(huì)自動(dòng)在末尾加上\0,所以要手動(dòng)加上\0。
main里面第一行,a[10]就表示分配了10個(gè)元素的空間,所以a的size是10個(gè)int,故結(jié)果為10。所以就第一行改為a[5]或者a[]就可以了。估計(jì)你想要的是a[]這種,根據(jù)你列表里的元素個(gè)數(shù),自動(dòng)分配。
int GetLength(int[] arr){return sizeof(arr) / sizeof(int); //就是用sizeof計(jì)算出來的數(shù)組長度 除以 數(shù)據(jù)類型的長度。