2016-05-15 490 views
-4

假設我正在定義一個打印多維數組元素的函數。將指針作爲參數傳遞給函數的正確方法是什麼?

int print(int *a) 
{ 
for (int i=0;i<4;i++) 
{ 
for(int j=0;j<4;j++) 
{ 
cout<< *((a+i*4)+j);} 
} 
} 
return 0;} 

當我這個功能在使用主叫 -

int c=print(int *a) or print(a) 

它顯示錯誤,但使用

int c=print((int*)a) 

的是這3之間的區別調用時給出正確的輸出?

+0

我認爲這是C++ - 爲什麼不使用'的std :: array'? –

+0

爲什麼'print'沒有返回值? –

+0

假設你定義了一個返回'int'的函數,然後在該函數的實現中沒有包含'return'語句。你認爲使用你沒有返回值的函數的返回值會是什麼?你如何期待這個功能正常工作?學習編寫代碼最重要的事情是如何實際**讀取你正在編寫的代碼並理解它做了什麼(而不是)。 –

回答

-2

請首先閱讀:此處描述的方法可能會導致MEMORY LEAK。如果不考慮內存對齊和大小,您可能永遠不會投射指針。

  1. 這是一個糟糕的電話。

    int c=print(int *a); 
    
  2. 這應該是正確的方法,你應該確保「一」是一個指向整型,其他情況下你可能有內存泄漏,要注意自己的編譯器警告。

    int c=print(a); 
    
  3. 在這種情況下your're做A的明確投

    ,迫使它是一個指向INT,沒有什麼你真的做的事,你可能會導致內存泄漏,要注意你的編譯器警告。

    int c=print((int*)a); 
    

注意

在C/C++指針的工作是非常危險的,如果你不是這個概念非常清晰。如果你不投出你的指針在這個階段的任何錯誤可能會導致致命的內存泄漏。內存泄漏是由於像這樣的情況導致的內存不足,當指針不在正確的投影中時,它可能會使程序或其任何部分崩潰。

關於你的標題:

Your're問 「詮釋*」 和 「爲(int *)」 之間的區別,你的問題沒有得到很好的形成。這可能是:

「什麼是傳遞一個指針作爲參數傳遞給函數的正確方法」

+0

爲什麼第一個電話是壞電話?它還告訴'a'是一個指向int的指針。我們用它來定義函數的參數和所有參數。 –

+0

case1是一個不好的調用,因爲你正在編寫一個代碼,當你定義函數時應該去。這是一個錯誤。您應該按照case2或3進行操作。 在case3中,這稱爲「cast」,它是從一個指針到另一個指針的顯式轉換。 – christian

+0

@HunarJain:這只是一個語法錯誤,沒有任何意義。事實上,你用它來定義函數的參數是不相關的,這並不意味着它可以在完全不同的上下文中使用它。 'int c = print(嗨,編譯器!這是一個指向int ----> a的指針);'也「表示'a'是一個指向int的指針,但它也是一個語法錯誤。 –

相關問題