为什么要打印元素而不是基地址?

3 c string pointers

这是我写的程序:

main()
{
    struct book
           {
               char name[25] ;
               char author[25] ;
               int callno ;
           } ;

     struct book b1 = { "Let us C", "YPK", 101 };
     display(b1.name, b1.author, b1.callno);
 }

void display(char *s, char *t, int n)
{
    printf ("\n%s %s %d", s, t, n);
}
Run Code Online (Sandbox Code Playgroud)

输出是

让我们C YPK 101

按要求

现在,我们传递给函数什么display()是琴弦的基址name,并author在该函数的定义,使用指针.那么为什么函数喜欢printf("\n%s %s %d", s, t, n) 而不喜欢printf("\n%s %s %d", *s, *t, n)

第二个没有运行.是不是s基地址和*s存储在该地址的字符串?

tem*_*def 6

在C中,字符串只是内存块,恰好在它们的末尾有一个空终止符.惯例是通过char*指向字符串开头地址的指针来引用字符串.因此,库printf函数的设计使得说明%s符期望您提供指向最终应打印出的字符串开头的指针.

如果取消引用char*指针,则返回char表示该字符串的初始元素的单个指针.请注意,这不是字符串本身 - 它只是第一个字符.如果你试图传递*s到预期printf%s说明符,你可能会崩溃程序,因为printf然后会跳转到一个内存地址,其数值由数字值给出,char并尝试开始打印它在那里找到的字符.