看到個題目:

編寫一個程序,聲明一個3x5的數組並初始化,具體數值可以隨意.程序列印出數值,然後數值翻一番,接著再次列印出新值.編寫一個函數來顯示數組的內容,在編寫另一個函數執行翻倍功能.數組名和數組行數作為參數有程序傳遞給函數.現在問題在於:怎麼在函數條件只有數組名和數組行數的情況下,怎麼得到數組的列數呢?

感謝你們的回答.


題目的意思不是很明確,函數介面是任意的嗎?那就把參數類型寫成 Type (*)[5], size_t n

#include &

void func2(int ar2[][3])
{
printf("%d
",(int)(ar2 + 1) - (int)(ar2));
}

void func3(int ar3[][3][3])
{
printf("%d
",(int)(ar3 + 1) - (int)(ar3));
}

int main(int argc, char *argv[])
{
int ar1[2];
printf("%d
",(int)(ar1 + 1) - (int)(ar1));

int ar2[2][3];
printf("%d
",(int)(ar2 + 1) - (int)(ar2));

int ar3[2][3][3];
printf("%d
",(int)(ar3 + 1) - (int)(ar3));

func2(ar2);
func3(ar3);
return 0;
}

4
12
36
12
36

不太清楚行列是什麼,對於多維數組,傳入參數的聲明中已經包含了除最高維長度外的其他信息了,所以只需要傳入最高維的長度.

= =我沒關注任何編程相關的話題呀話說被邀是什麼情況.


函數原型可以為xxx(int (*)[5], int sz);實際傳遞時參數為二維數組名和3關鍵是要懂得二維數組和指針的關係。

【現在問題在於:怎麼在函數條件只有數組名和數組行數的情況下,怎麼得到數組的列數呢?】

  • sizeof可求,,,、
  • 另外,二維數組傳遞給函數作為參數,那麼這個函數時必須告訴編譯器列數的,,,這個問題是不成立的吧,不會不知道列數的,,,,


沒看懂這個題目

函數條件只有數組名和數組行數的情況下,不可能得到數組列數。

我一般是寫c++的,c都快忘的差不多了,憑著我的記憶說下我的理解吧。

對於二維數組來說,我們可以將其理解為一個指針數組(如果指針數組和數組指針還是傻傻分不清楚的話,還是先去google下)。對於數組來說,我們肯定是需要需要知道其維度的信息的,在參數聲明時就需要寫明該信息。對於指針數組中的元素,我們自然也需要將其維度信息作為參數傳入。

當然,我們也可以將二維數組理解為二重指針,這時就需要將其行和列作為參數傳入。

看題主的意思,按我的理解,應該是函數的參數列表的設計上有問題。

我覺得我應該描述清楚了吧
推薦閱讀:
相關文章