繁体   English   中英

C 指针,了解如何将 arrays 传递给 function

[英]C Pointers, understanding how to pass arrays to function

我目前正在为即将进行的测试修改 C 指针,并且在浏览讲座幻灯片时遇到了一个相当有趣的程序。

#include <stdio.h>
#include <ctype.h>

void convertToUppercase(char *sPtr);//function prototype, input is a dereferenced pointer

int main(void)
{
    char string[] = "cHaRaCters and $32.98";

    printf("The string before conversion is %s\n", string);
    convertToUppercase(string); //Why can I just input the string array into the function? I don't need a pointer?
    printf("The string after conversion is %s", string);
}

void convertToUppercase(char *sPtr)
{
    while (*sPtr != '\0')//Clearly see the NULL terminating character, means the entire array is passed to the function.
    {
        *sPtr = toupper(*sPtr);
        sPtr++;
    }
}

我不明白的是这一行: convertToUppercase( string );

function 原型需要 (char *sPtr) 作为输入,但在这种情况下,字符串数组只是传递到 function 调用中。 如何?

我真的不明白这是如何工作的。 谁能帮助我更好地理解这段代码?

我的猜测是数组名称本身的“字符串”已经包含整个数组本身的地址(这就是为什么当我们将指针分配给数组时我们不放“&”)

提前谢谢你,保重!

Function 具有数组类型的参数由编译器调整为指向数组元素类型的指针类型。

例如这两个 function 声明

void convertToUppercase(char sPtr[]);

void convertToUppercase(char *sPtr);

声明相同的 function。

您可以在程序中包含这两个声明,尽管编译器会发出一条消息,指出存在相同 function 的冗余声明。

另一方面,在表达式中使用的数组指示符(例如在sizeof运算符中使用)被转换为指向它们的第一个元素的指针。

所以这个 function 调用

convertToUppercase(string)

相当于下面的 function 调用

convertToUppercase( &string[0] )

请注意,最好通过以下方式声明和定义 function

char * convertToUppercase( char s[] )
{
    for ( char *p = s; *p; ++p )
    {
        *p = toupper( ( unsigned char )*p );
    }

    return s;
}

Arrays 在传递给函数时自动转换为指针。 它只是这样做,就好像你写过convertToUppercase((char*)string); . 只是一种隐式类型转换规则。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM