簡體   English   中英

以字符指針作為參數的函數

[英]Function with character pointer as arguments

在下面的代碼中,當函數print_uart傳遞字符串“ Hello world”時,在* s中確切接收了什么?是字符H還是存儲字符串“ Hello World”的內存地址?

volatile unsigned int * const UART0DR = (unsigned int *)0x101f1000;
void print_uart0(const char *s)
{
  while(*s != '\0')  
  {                                 /* Loop until end of string */
    *UART0DR = (unsigned int)(*s);  /* Transmit char */
    s++;                            /* Next char */
  }
}
void c_entry() 
{
    print_uart0("Hello world!\n");
}

s是指向存儲字符串“ Hello World”的內存的指針。
*s是第一個字符'H'

編譯器將獲取所有字符串常量並為其分配內存。 s您在內存中有一個存儲它的位置,到*s您將獲得此字符串的第一個字符。

還需要注意的是,使用完全相同的字符串常量可能會指向內存中的同一位置->這樣的優化可以節省一些內存。

參數s指向字符串文字“ Hello world!\\ n”的第一個字符。 默認情況下,字符串以\\ 0終止,因此while循環

while(*s != '\0')  
{                                 /* Loop until end of string */
  *UART0DR = (unsigned int)(*s);  /* Transmit char */
  s++;                            /* Next char */
}

一次將一個字符H,e,...復制到相同的地址'UART0DR'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM