[英]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.