2016-05-15 274 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的指针,但它也是一个语法错误。 –

相关问题