这是一个非常简单的问题,但以下函数原型是什么意思?
int square(int y,size_t*x)
size_t*的意思是什么?我知道size_t是一种数据类型(int> = 0).但是如何阅读附加的*?它是指向x的内存位置的指针吗?总的来说,我遇到了这个问题,如果有人能提供方便的参考,我会很感激.
谢谢大家.我理解指针是什么,但我想我很难理解指针和函数之间的关系.当我看到函数原型定义为int sq(int x, int y),那么我很清楚发生了什么.然而,当我看到类似的东西时int sq( int x, int* y),我不能 - 为了我的生活 - 理解第二个参数的真正含义.在某种程度上,我理解它意味着"传递一个指针",但我不能很好地理解它自己操纵它.
Kor*_*icz 10
理解指针的教程怎么样?
但是,在这种情况下,指针可能用于修改/返回值.在C中,有两个基本机制,函数可以返回一个值(请原谅哑巴的例子):
它可以直接返回值:
float square_root( float x )
{
if ( x >= 0 )
return sqrt( x );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
或者它可以通过指针返回:
int square_root( float x, float* result )
{
if ( x >= 0 )
{
*result = sqrt( result );
return 1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个被称为:
float a = square_root( 12.0 );
Run Code Online (Sandbox Code Playgroud)
......而后者:
float b;
square_root( 12.00, &b );
Run Code Online (Sandbox Code Playgroud)
请注意,后一个示例还允许您检查返回的值是否真实 - 此机制在C库中广泛使用,其中函数的返回值通常表示成功(或缺少它),而值本身是通过参数返回.
因此,后者你可以写:
float sqresult;
if ( !square_root( myvar, &sqresult ) )
{
// signal error
}
else
{
// value is good, continue using sqresult!
}
Run Code Online (Sandbox Code Playgroud)