C语言-printf中使用的占位符

在 C 语言中,printf 函数可以使用不同的 格式说明符(format specifiers) 来打印各种类型的变量。以下是常见变量类型及其对应的 printf 格式说明符:


1. 基本数据类型

(1) 整数类型

类型printf 格式说明符示例
int%d%iprintf("%d", 42);
unsigned int%uprintf("%u", 42u);
short%hdprintf("%hd", (short)42);
unsigned short%huprintf("%hu", (unsigned short)42);
long%ldprintf("%ld", 42L);
unsigned long%luprintf("%lu", 42UL);
long long%lldprintf("%lld", 42LL);
unsigned long long%lluprintf("%llu", 42ULL);

(2) 浮点数类型

类型printf 格式说明符示例
float%fprintf("%f", 3.14f);
double%lf%fprintf("%lf", 3.14);
long double%Lfprintf("%Lf", 3.14L);

科学计数法(指数形式)

  • %e / %Efloat/double
  • %Le / %LElong double

自动选择 %f%e

  • %g / %G(自动选择更紧凑的格式)

(3) 字符类型

类型printf 格式说明符示例
char%cprintf("%c", 'A');
unsigned char%c%hhu(转十进制)printf("%hhu", (unsigned char)'A');
signed char%c%hhd(转十进制)printf("%hhd", (signed char)-65);

(4) 字符串

类型printf 格式说明符示例
char*(字符串)%sprintf("%s", "Hello");

(5) 指针

类型printf 格式说明符示例
void*(指针地址)%pprintf("%p", &x);

2. 特殊格式

(1) 八进制和十六进制

格式printf 说明符示例
八进制%oprintf("%o", 10);(输出 12
十六进制(小写)%xprintf("%x", 255);(输出 ff
十六进制(大写)%Xprintf("%X", 255);(输出 FF
0x 前缀%#x%#Xprintf("%#x", 255);(输出 0xff

(2) 二进制(非标准,需手动实现)

C 标准库没有直接打印二进制的格式说明符,但可以自己实现:

void print_binary(unsigned int num) {
    for (int i = 31; i >= 0; i--) {
        putchar((num & (1 << i)) ? '1' : '0');
    }
}

调用:

unsigned int x = 10;
printf("Binary: ");
print_binary(x); // 输出 00000000000000000000000000001010

(3) 控制输出格式

格式说明示例
%5d最小宽度 5,右对齐printf("%5d", 42);42
%-5d最小宽度 5,左对齐printf("%-5d", 42);42
%05d补 0 到 5 位printf("%05d", 42);00042
%.2f保留 2 位小数printf("%.2f", 3.14159);3.14

3. 完整示例

#include <stdio.h>

int main() {
    int a = 42;
    float b = 3.14f;
    char c = 'A';
    char str[] = "Hello";
    int *ptr = &a;

    printf("Integer: %d\n", a);
    printf("Float: %.2f\n", b);
    printf("Char: %c\n", c);
    printf("String: %s\n", str);
    printf("Pointer: %p\n", (void*)ptr);
    printf("Hex: %x\n", a);  // 2a
    printf("Octal: %o\n", a); // 52

    return 0;
}

输出:

Integer: 42
Float: 3.14
Char: A
String: Hello
Pointer: 0x7ffd12345678
Hex: 2a
Octal: 52

总结

变量类型printf 格式说明符
int%d / %i
unsigned int%u
long%ld
long long%lld
float%f
double%lf / %f
long double%Lf
char%c
char*%s
void*%p
十六进制%x / %X
八进制%o
科学计数法%e / %E

如果你需要打印二进制,可以自己实现一个函数(如上面的 print_binary)。

上一篇
下一篇