【问题标题】:Shouldn't a character pointer array, print a pointer? Why does it print the string it is pointed to?字符指针数组不应该打印指针吗?为什么它打印它指向的字符串?
【发布时间】:2021-12-05 16:52:39
【问题描述】:

我有以下代码:

    static char *name[] = {
            "January",
            "February",
            "March",
    };

    printf("%s", name[0]);

当我用name[0] 传递printf 时,它会打印January。但它不应该打印一月份的address,因为上面的数组存储了一月份的pointer

【问题讨论】:

  • printf%s 格式需要一个指针。您的 name 数组是一个指针数组。所以name[0]是一个指针,大家都很开心。 (更具体地说,%s 想要,name[0] 是一个指向 char 的指针,它指向一个有效的、以 null 结尾的字符串的开头。)
  • 如果要地址,请使用%p
  • 请参阅this recent question 了解一些可能相关的信息。
  • name[0] 存储指向char 的不可修改匿名数组的第一个字符的指针,即字符串文字"January"

标签: arrays c pointers printf c-strings


【解决方案1】:

转换说明符%s 将相应的参数解释为指向字符串的第一个字符的指针,该字符串在遇到终止零字符'\0' 之前一直输出。

如果你想输出指针本身那么你应该写

printf( "%p", ( void * )name[0] );

注意本声明中的内容

static char *name[] = {
        "January",
        "February",
        "March",
};

用作初始值设定项的字符串文字被隐式转换为指向其第一个字符的指针,这些指针存储在数组name中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2021-03-27
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多