亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么數組參數的大小與main中的大小不同?

為什么數組參數的大小與main中的大小不同?

C C++
慕工程0101907 2019-05-29 16:50:15
為什么數組參數的大小與main中的大小不同?為什么作為參數發送的數組的大小與main中的相同?#include <stdio.h>void PrintSize(int p_someArray[10]);int main () {     int myArray[10];     printf("%d\n", sizeof(myArray)); /* As expected, 40 */     PrintSize(myArray);/* Prints 4, not 40 */}void PrintSize(int p_someArray[10]){     printf("%d\n", sizeof(p_someArray));}
查看完整描述

4 回答

?
小唯快跑啊

TA貢獻1863條經驗 獲得超2個贊

將數組類型傳遞給函數時,會隱式轉換為指針類型。

所以,

void PrintSize(int p_someArray[10]) {
    printf("%zu\n", sizeof(p_someArray));}

void PrintSize(int *p_someArray) {
    printf("%zu\n", sizeof(p_someArray));}

是等價的。所以你得到的是價值sizeof(int*)


查看完整回答
反對 回復 2019-05-29
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

它是一個指針,這就是為什么它是一個常見的實現,將數組的大小作為第二個參數傳遞給函數


查看完整回答
反對 回復 2019-05-29
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

正如其他人所說,當用作函數參數時,數組會衰減到指向第一個元素的指針。還值得注意的是,sizeof不評估表達式,并且在與表達式一起使用時不需要括號,因此您的參數實際上根本不被使用,因此您也可以使用類型而不是值來編寫sizeof。

#include <stdio.h>void PrintSize1 ( int someArray[][10] );void PrintSize2 ( int someArray[10] );int main (){
    int myArray[10];
    printf ( "%d\n", sizeof myArray ); /* as expected 40 */
    printf ( "%d\n", sizeof ( int[10] ) ); /* requires parens */
    PrintSize1 ( 0 ); /* prints 40, does not evaluate 0[0] */
    PrintSize2 ( 0 ); /* prints 40, someArray unused */}void PrintSize1 ( int someArray[][10] ){
    printf ( "%d\n", sizeof someArray[0] );}void PrintSize2 ( int someArray[10] ){
    printf ( "%d\n", sizeof ( int[10] ) );}


查看完整回答
反對 回復 2019-05-29
?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

因此,您需要將數組的長度作為第二個參數傳遞。當您編寫代碼時,您既要聲明一個常量大小的數組,然后將該數組傳遞給函數,那么讓數組長度常量顯示在代碼中的幾個位置是很痛苦的...

K&R救援:

#define N_ELEMENTS(array) (sizeof(array)/sizeof((array)[0]))

所以現在你可以這樣做:

int a[10];...myfunction(a, N_ELEMENTS(a));


查看完整回答
反對 回復 2019-05-29
  • 4 回答
  • 0 關注
  • 605 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號