簡體   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