2016-03-11 75 views
0

在下面的代碼中,當函數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"); 
} 
+0

'揮發性無符號整型* const的' - 這是什麼意思是不斷變化的 –

+1

's'是一個指針,'* s'是char值。 '* UAT0DR =(...)(* s)'使用值。 – fukanchik

+0

@Ed,指針是'const',它指向的是volatile。 – chux

回答

1

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

+0

謝謝你......這是疑問.. – Ravi

0

編譯器將獲取所有的字符串常量併爲它們分配內存。在s中,您在存儲空間中存放了一個地方,並且通過*s獲得此字符串的第一個字符。

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

0

參數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」