我們先來介紹一種計算數組長度的方法:
成都創新互聯公司專業為企業提供鯉城網站建設、鯉城做網站、鯉城網站設計、鯉城網站制作等企業網站建設、網頁設計與制作、鯉城企業網站模板建站服務,10多年鯉城做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。#includeint main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int size=sizeof(arr)/sizeof(arr[0]);
return 0;
}
這里sizeof(arr)計算的是整個數組所占內存的大小,而sizeof(arr[0])計算的是arr[10]數組首元素所占內存的大小。這樣我們可以很方便的得到數組的大小,在較大型的項目中,一個數組可能會參與多個循環。用size表示數組長度的好處是,當我們需要改變數組長度時,我們只需要改變arr本身,而不用改變循環的條件。上述代碼運行就可以得到size=10
接下來進入正題:
我們把以上代碼封裝成函數
#includeint arr_size(int arr[])
{
return sizeof(arr)/sizeof(arr[0]);
}
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
printf("%d",arr_size(arr));
return 0;
}
再次運行,我們期待打印出的值為10,但F5運行后得到的值卻不是10
這是為什么呢?查閱資料,我們發現,c語言中,函數參數中的arr[]其實就是一個指針,它指向的是首元素的地址。
#includeint arr_size(int arr[])
{
printf("%p", arr);
return sizeof(arr) / sizeof(arr[0]);
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
arr_size(arr);
return 0;
}
用%p打印arr的地址,調試后可以發現,arr確實是首元素的地址,如下圖所示
所以我們得出結論,函數中數組作參數,其本質就是一種指向數組首元素的指針,此時sizeof(arr)表示求指針的大小,在x64中為8,而sizeof(arr[0])為int型變量的大小,即為4,則前面錯誤代碼運行的結果為8/4=2,不為10。
所以我們把函數改變一下
void arr_size(int arr[],int sz)
{
for (int i = 0; i< sz; i++)
{
printf("%d", arr[i]);
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int size=sizeof(arr) / sizeof(arr[0]);
arr_size(arr,size);
return 0;
}
我們也可以直接用指針作為參數
void arr_size(int *arr,int sz)
{
for (int i = 0; i< sz; i++)
{
printf("%d ", *(arr+i));
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int size=sizeof(arr) / sizeof(arr[0]);
arr_size(arr,size);
return 0;
}
結果同樣為正確的
實際上,arr[i]就是*(arr+i)。
以上是個人關于數組名作參數的理解,謝謝你看到這里^_^
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
文章標題:c語言數組名作為參數時,本質是什么?-創新互聯
瀏覽路徑:http://vcdvsql.cn/article48/deodep.html
成都網站建設公司_創新互聯,為您提供網站營銷、手機網站建設、網站制作、網站收錄、ChatGPT、用戶體驗
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯