在 C 语言中,printf
函数可以使用不同的 格式说明符(format specifiers) 来打印各种类型的变量。以下是常见变量类型及其对应的 printf
格式说明符:
1. 基本数据类型
(1) 整数类型
类型 | printf 格式说明符 | 示例 |
---|
int | %d 或 %i | printf("%d", 42); |
unsigned int | %u | printf("%u", 42u); |
short | %hd | printf("%hd", (short)42); |
unsigned short | %hu | printf("%hu", (unsigned short)42); |
long | %ld | printf("%ld", 42L); |
unsigned long | %lu | printf("%lu", 42UL); |
long long | %lld | printf("%lld", 42LL); |
unsigned long long | %llu | printf("%llu", 42ULL); |
(2) 浮点数类型
类型 | printf 格式说明符 | 示例 |
---|
float | %f | printf("%f", 3.14f); |
double | %lf 或 %f | printf("%lf", 3.14); |
long double | %Lf | printf("%Lf", 3.14L); |
科学计数法(指数形式):
%e
/ %E
(float
/double
)
%Le
/ %LE
(long double
)
自动选择 %f
或 %e
:
(3) 字符类型
类型 | printf 格式说明符 | 示例 |
---|
char | %c | printf("%c", 'A'); |
unsigned char | %c 或 %hhu (转十进制) | printf("%hhu", (unsigned char)'A'); |
signed char | %c 或 %hhd (转十进制) | printf("%hhd", (signed char)-65); |
(4) 字符串
类型 | printf 格式说明符 | 示例 |
---|
char* (字符串) | %s | printf("%s", "Hello"); |
(5) 指针
类型 | printf 格式说明符 | 示例 |
---|
void* (指针地址) | %p | printf("%p", &x); |
2. 特殊格式
(1) 八进制和十六进制
格式 | printf 说明符 | 示例 |
---|
八进制 | %o | printf("%o", 10); (输出 12 ) |
十六进制(小写) | %x | printf("%x", 255); (输出 ff ) |
十六进制(大写) | %X | printf("%X", 255); (输出 FF ) |
带 0x 前缀 | %#x 或 %#X | printf("%#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
)。