带字符指针的函数作为参数

时间:2016-03-11 21:15:31

标签: c pointers

在下面的代码中,当函数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");
}

3 个答案:

答案 0 :(得分:1)

s是指向存储字符串“Hello World”的内存的指针 *s是第一个字符'H'

答案 1 :(得分:0)

编译器获取所有字符串常量并为它们分配内存。在s中,您在内存中存放了一个存储位置,*s您将获得该字符串的第一个字符。

同样重要的是要注意,使用完全相同的字符串常量可能会指向内存中的相同位置 - >这样的优化可以节省一些内存。

答案 2 :(得分:0)

参数s指向字符串文字的第一个字符" Hello world!\ n"。默认情况下,字符串以\ 0结尾 所以while循环

))(connect=port))

将H,e,...一个字符复制到同一地址' UART0DR'