首页 > 解决方案 > C中的字符串和指针

问题描述

指针是存储地址的变量。

char *ptr = "string";
printf("%s",ptr);

在此代码片段中,整个字符串在没有取消引用的情况下打印。为什么会这样?

在这种情况下,字符正在打印,它像数组一样按预期工作。

char *ptr = "string";
printf("%c",*ptr);

这两种情况有什么区别

标签: arrayscstringpointers

解决方案


格式字符串 "%s" 期望对应的参数指向字符串的第一个字符,并且函数printf输出字符串,直到'\0'遇到终止的零字符。

实际上这个调用printf

char *ptr = "string";
printf("%s",ptr);

通过以下方式在引擎盖下逻辑实现

#include <stdio.h>

int main(void) 
{
    char *ptr = "string";

    for ( char *tmp = ptr; *tmp != '\0'; ++tmp )
    {
        printf( "%c", *tmp );
    }
    
    return 0;
}

格式字符串"%c"需要一个 char 类型的对象,函数printf将对象输出为字符。


推荐阅读