一、数据类型表
数据类型 | 说明 | 字节数(32 位系统) | 字节数(64 位系统) | 取值范围 |
---|---|---|---|---|
char |
字符型 | 1 | 1 | -128 到 127 或 0 到 255(取决于编译器是否为有符号) |
unsigned char |
无符号字符型 | 1 | 1 | 0 到 255 |
signed char |
有符号字符型 | 1 | 1 | -128 到 127 |
short 或 short int 或 signed short int |
短整型 | 2 | 2 | -32,768 到 32,767 |
unsigned short 或 unsigned short int |
无符号短整型 | 2 | 2 | 0 到 65,535 |
int 或 signed int |
整型 | 4 | 4 | -2,147,483,648 到 2,147,483,647 |
unsigned int |
无符号整型 | 4 | 4 | 0 到 4,294,967,295 |
long 或 long int 或 signed long int |
长整型 | 4 | 8 | -2,147,483,648 到 2,147,483,647(32 位) -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(64 位) |
unsigned long 或 unsigned long int |
无符号长整型 | 4 | 8 | 0 到 4,294,967,295(32 位) 0 到 18,446,744,073,709,551,615(64 位) |
long long 或 long long int 或 signed long long int |
更长的长整型 | 8 | 8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long long 或 unsigned long long int |
无符号更长的长整型 | 8 | 8 | 0 到 18,446,744,073,709,551,615 |
float |
单精度浮点型 | 4 | 4 | 约 ±1.18×10⁻³⁸ 到 ±3.40×10³⁸(6 - 7 位有效数字) |
double |
双精度浮点型 | 8 | 8 | 约 ±2.23×10⁻³⁰⁸ 到 ±1.80×10³⁰⁸(15 - 16 位有效数字) |
long double |
扩展精度浮点型 | 8 或 10 或 12 或 16 | 8 或 10 或 12 或 16 | 因编译器而异 |
二、printf
函数
printf
函数是用来输出格式化字符串的。%
是格式化说明符的起始符号
基本格式化说明符
整数类型
%d
或%i
:用于输出有符号十进制整数。
#include <stdio.h>
int main() {
int num = 123;
printf("使用 %%d 输出: %d\n", num);
printf("使用 %%i 输出: %i\n", num);
return 0;
}
// 使用 %d 输出: 123
// 使用 %i 输出: 123
%%
是一个特殊的转义序列,用于在格式化字符串中输出百分号 %
本身。因为 %
在 printf
函数里是格式化说明符的起始符号,若你想输出 %
字符,就得用 %%
来表示。
%u
:用于输出无符号十进制整数。
#include <stdio.h>
int main() {
unsigned int num = 456;
printf("使用 %%u 输出: %u\n", num);
return 0;
}
// 使用 %u 输出: 456
%o
:用于输出无符号八进制整数。
#include <stdio.h>
int main() {
int num = 8;
printf("使用 %%o 输出: %o\n", num);
return 0;
}
%x
或%X
:用于输出无符号十六进制整数,%x
输出小写字母,%X
输出大写字母。
#include <stdio.h>
int main() {
int num = 255;
printf("使用 %%x 输出: %x\n", num);
printf("使用 %%X 输出: %X\n", num);
return 0;
}
// 使用 %x 输出: ff
// 使用 %X 输出: FF
浮点类型
%f
:用于输出十进制浮点数(单精度和双精度),默认保留 6 位小数。
#include <stdio.h>
int main() {
float f = 3.14159;
printf("使用 %%f 输出: %f\n", f);
return 0;
}
// 使用 %f 输出: 3.141590
%e
或%E
:用于以科学计数法输出浮点数,%e
使用小写e
,%E
使用大写E
。
#include <stdio.h>
int main() {
double d = 1234567.89;
printf("使用 %%e 输出: %e\n", d);
printf("使用 %%E 输出: %E\n", d);
return 0;
}
// 使用 %e 输出: 1.234568e+06
// 使用 %E 输出: 1.234568E+06
%g
或%G
:根据数值大小自动选择%f
或%e
格式输出,%g
用小写字母,%G
用大写字母。
#include <stdio.h>
int main() {
double d1 = 123.45;
double d2 = 1234567890.0;
printf("使用 %%g 输出 d1: %g\n", d1);
printf("使用 %%g 输出 d2: %g\n", d2);
return 0;
}
// 使用 %g 输出 d1: 123.45
// 使用 %g 输出 d2: 1.23457e+09
字符和字符串类型
%c
:用于输出单个字符。
#include <stdio.h>
int main() {
char ch = 'ABCD';
printf("使用 %%c 输出: %c\n", ch);
return 0;
}
// 使用 %c 输出: D
%s
:用于输出字符串。
#include <stdio.h>
int main() {
char str[] = "Hello, World!";
printf("使用 %%s 输出: %s\n", str);
return 0;
}
// 使用 %s 输出: Hello, World!
指针类型
%p
:用于输出指针的地址,通常以十六进制形式显示。
#include <stdio.h>
int main() {
int num = 10;
int* ptr = #
printf("使用 %%p 输出指针地址: %p\n", ptr);
return 0;
}
// 使用 %p 输出指针地址: 00000091CC7DF624
格式化说明符的修饰符
除了基本的格式化说明符,还可以使用修饰符来进一步控制输出格式。
宽度修饰符
可以指定输出的最小宽度,若数据长度小于指定宽度,则会在左边补空格(默认右对齐)。
#include <stdio.h>
int main() {
int num = 123;
printf("宽度为 5 输出: %5d\n", num);
return 0;
}
// 宽度为 5 输出: 123
精度修饰符
对于浮点数,精度修饰符指定小数点后的位数;对于字符串,指定输出的最大字符数。
#include <stdio.h>
int main() {
double d = 3.1415926;
char str[] = "Hello, World!";
printf("保留 2 位小数输出: %.2f\n", d);
printf("输出前 5 个字符: %.5s\n", str);
return 0;
}
// 保留 2 位小数输出: 3.14
// 输出前 5 个字符: Hello
对齐修饰符
-
用于左对齐输出。
#include <stdio.h>
int main() {
int num = 123;
printf("左对齐,宽度为 5 输出: %-5d\n", num);
return 0;
}
// 左对齐,宽度为 5 输出: 123
填充修饰符
0
用于在宽度不足时用 0 填充。
#include <stdio.h>
int main() {
int num = 123;
printf("用 0 填充,宽度为 5 输出: %05d\n", num);
return 0;
}
// 用 0 填充,宽度为 5 输出: 00123
三、''
和 ""
的区别
单引号('
):用于字符赋值
- 用途:单引号用于表示单个字符,其类型为
char
。 - 存储内容:单引号里的字符会被转换为对应的 ASCII 码值,并以整数形式存储在
char
类型的变量中。 - 示例:
char c = 'A'; // 把字符 'A' 的ASCII码值(65)赋给变量 c
双引号("
):用于字符串赋值
- 用途:双引号用于表示字符串字面量,字符串本质上是由多个字符组成的数组,并且以空字符
'\0'
作为结束标志。 - 类型:双引号括起来的字符串,其类型是
const char[]
,也就是指向字符串常量的指针。 - 存储内容:字符串会被存储在内存的只读区域,赋值给变量的实际上是字符串首个字符的内存地址。
- 示例:
const char* str = "Hello"; // 定义一个指向字符串常量 "Hello" 的指针
特性 | 单引号(' ) |
双引号(" ) |
---|---|---|
表示对象 | 单个字符 | 字符串(字符数组) |
类型 | char |
const char* (字符串常量指针) |
赋值方式 | char c = 'A'; |
const char* s = "ABC"; |
内存存储 | 存储单个字符的 ASCII 码值 | 存储字符串数组及结尾的 '\0' |
示例说明 | 'A' 等价于数值 65 |
"A" 是包含 'A' 和 '\0' 的数组 |
评论区