C++ 将指针作为参数传递给函数的正确方法是什么?
假设我正在定义一个打印多维数组元素的函数C++ 将指针作为参数传递给函数的正确方法是什么?,c++,arrays,pointers,C++,Arrays,Pointers,假设我正在定义一个打印多维数组元素的函数 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) 这三种方法的区别是什么?请先阅读:此处描述的方法可能会导致内存泄漏。如果不考虑内存对齐方式和大小,您可能永远不会强制转换指针 这是
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)
这三种方法的区别是什么?请先阅读:此处描述的方法可能会导致内存泄漏。如果不考虑内存对齐方式和大小,您可能永远不会强制转换指针
int c=print(int *a);
int c=print(a);
int c=print((int*)a);
int c=print(a);
int c=print((int*)a);
“将指针作为参数传递给函数的正确方法是什么?”>/P>我假设这是C++——为什么不使用<代码> STD::数组< /代码>?为什么<代码>打印< /C>不返回一个值?假设您定义了一个函数返回代码> int <代码>,然后在该函数的实现中不能包含<代码>返回< /代码>语句。您认为使用未从中返回值的函数的返回值会是什么?您希望该功能如何正常工作?关于编写代码,最重要的是要了解如何实际阅读您正在编写的代码,并了解它做什么(和不做什么)。我知道它应该返回一个整数,但这不是我所面临的错误!您面临的错误是,您发布的代码毫无意义,并要求我们解释为什么它不起作用。发布你真正的代码,而不是为了你的问题而编造的东西,并问一个关于代码的具体问题。为什么第一个是一个糟糕的电话?它还告诉我们“a”是指向int的指针。我们在定义函数的参数时使用它,而all.case1是一个错误的调用,因为您编写的代码应该在定义函数时执行。这是一个错误。你应该按照案例2或案例3进行。在案例3中:这称为“cast”,它是从一个指针到另一个指针的显式转换。@HunarJain:这只是一个语法错误,没有任何意义。在定义函数的参数时使用它这一事实是不相关的,这并不意味着在完全不同的上下文中使用它是可以的
intc=print(嗨,编译器!这是指向int-->a的指针)
还“告诉a
是指向int的指针”,但这也是一个语法错误。@christian:你的答案前后都有(2)和(3)。例如,如果a
是指向char
的指针,那么使用cast-in(3)是一个“非常危险”的选项,因为您迫使编译器接受一些可能毫无意义的内容。(2) 当类型不匹配时将无法编译,这是您想要的,所以这是最好的选择。此外,“内存泄漏”的意思与您描述的完全不同。@PaulGriffiths是的,将一个字节转换为整数是非常危险的。在这个答案中不是这样的。我试图用正确的方式来解释,而不是C语言糟糕用法的连续性。