理解C中的函数和指针

Jos*_*osh 2 c

这是一个非常简单的问题,但以下函数原型是什么意思?

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)