文章目录
C语言中内置类型
- 字节(Byte)是计算机信息技术用于计量存储容量和传输容量的一种计量单位。
- 在计算机中,字节是基本的存储单位。它通常由 8 位(bit)二进制数组成,1 字节可以表示 256(2 的 8 次方)种不同的状态或数值
- 例如,一个字节可以存储一个字符(如字母、数字、标点符号等)在常见的字符编码(如 ASCII 编码)中。
- 字节常用于描述文件大小、内存容量、网络传输数据量等方面。例如,我们说一个文件大小是 1024 字节,或者计算机的内存是 8GB(1GB = 1024MB,1MB = 1024KB,1KB = 1024 字节)等。
C 语言的内置类型主要包括以下几类:
1. 基本数据类型
-
整型(Integer Types)
- char:通常占用1个字节,可用来存储字符的 ASCII 值(-128 到 127 或者 0 - 255,取决于是否为有符号类型)。
- short:短整型,一般占2个字节,存储范围是 -32768 到 32767(有符号)。
- int:整型,在不同的编译器和系统中,其占用的字节数可能不同,通常在 32 位系统中占 4 个字节,范围是 -2147483648 到 2147483647(有符号)。
- long:长整型,一般在 32 位系统中占 4 个字节,在 64 位系统中占 8 个字节,有符号情况下范围相应变化。
- long long:更长的整型,通常占 8 个字节,有符号时范围是 -9223372036854775808 到 9223372036854775807。
-
浮点型(Floating - Point Types)
- float:单精度浮点型,占用 4 个字节,提供大约 7 位有效数字的精度。
- double:双精度浮点型,占用 8 个字节,提供大约 15 位有效数字的精度。
-
枚举类型(Enumerated Types)
- 枚举类型是一种用户自定义的整数类型,通过关键字
enum
来定义。例如:
enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
这里
enum Weekday
是一个枚举类型,Monday
、Tuesday
等是枚举常量,默认从 0 开始依次赋值,也可以手动指定枚举常量的值。 - 枚举类型是一种用户自定义的整数类型,通过关键字
2. 指针类型(Pointer Types)
- 指针是一种特殊的变量,它存储的是另一个变量的内存地址。例如:
int *ptr;
声明了一个指向int
类型变量的指针ptr
。char *str;
声明了一个指向char
类型变量的指针str
,常用于字符串操作。
3. 空类型(void Type)
void
类型表示没有类型或者未知类型。主要有以下两种常见用法:- 作为函数的返回类型,表示函数不返回任何值,例如:
void function();
。 - 作为指针类型,表示通用指针,例如:
void *ptr;
,可以用来存储任何类型变量的地址。
- 作为函数的返回类型,表示函数不返回任何值,例如:
全局变量和局部变量
全局变量
- 定义位置和作用域
- 定义在所有函数体之外,通常位于程序的开头部分。
- 作用域是从定义位置开始直到整个程序文件结束,对所有的函数都可见,即可以被程序中的多个函数访问和修改。
- 存储位置和生命周期
- 存储在全局数据区(静态存储区)。
- 生命周期贯穿整个程序的运行过程,从程序开始运行到程序结束才会被销毁。
- 示例代码
#include <stdio.h>
// 定义全局变量
int globalVar = 10;
int main() {
printf("在 main 函数中访问全局变量: %d\n", globalVar);
return 0;
}
// 其他函数也可以访问 globalVar
void anotherFunction() {
globalVar++;
printf("在 anotherFunction 函数中访问全局变量: %d\n", globalVar);
}
局部变量
- 定义位置和作用域
- 在函数内部或者复合语句(如
{}
括起来的代码块)内部定义。 - 作用域仅限于定义它的函数或者复合语句内部,在该范围之外无法访问。
- 在函数内部或者复合语句(如
- 存储位置和生命周期
- 存储在栈区。
- 生命周期从变量被定义开始,到包含它的函数执行结束或者复合语句执行结束时销毁。
- 示例代码
#include <stdio.h>
int main() {
// 定义局部变量
int localVar = 5;
printf("在 main 函数中访问局部变量: %d\n", localVar);
{
int innerLocalVar = 8;
printf("在复合语句中访问局部变量: %d\n", innerLocalVar);
}
// 这里无法访问 innerLocalVar
return 0;
}
原版:
-
局部变量:一般将定义在函数中的变量(大括号内),称为局部变量,其只能在函数内部使用。
-
全局变量:定义在全局作用域中的变量,
main
函数外的变量,称为全局变量。 -
全局变量的使用:
extern
-
全局变量的生命周期,随程序启动而生,随程序结束而消亡,在任何函数中都可以使用。
-
局部变量的生命周期,进入大括号内创建,出大括号销毁。
-
不允许在同一个作用域中定义多个相同名称的变量。
-
注意:全局变量使用起来方便,但为了防止冲突和安全性,尽量避免定义全局变量。
输入和输出函数
printf
基本概念
printf
是 C 语言中的一个标准输出函数,用于将指定格式的数据输出到标准输出设备(通常是显示器)。
基本使用格式
- 一般形式为:
printf("格式控制字符串", 输出列表);
格式控制字符串
- 由普通字符和格式说明符组成。
- 普通字符:按原样输出的字符,例如在
printf("The result is: %d", num);
中,The result is:
就是普通字符。 - 格式说明符:以
%
开头,后面跟一个或多个字符,用于指定输出数据的类型和格式。%d
:用于输出十进制整数(有符号整数)。例如:int num = 10; printf("%d", num);
。%u
:用于输出无符号十进制整数。%o
:输出八进制整数。%x
或%X
:输出十六进制整数(%x
输出小写字母表示的十六进制数,%X
输出大写字母表示的十六进制数)。%f
:用于输出单精度浮点数(float 类型),默认输出 6 位小数。例如:float fnum = 3.14; printf("%f", fnum);
。%lf
:用于输出双精度浮点数(double 类型)。%c
:输出单个字符。例如:char ch = 'A'; printf("%c", ch);
。%s
:输出字符串。例如:char str[] = "Hello"; printf("%s", str);
。%p
:用于输出指针的值(内存地址)。%%
:输出%
字符本身。
- 普通字符:按原样输出的字符,例如在
输出列表
- 是需要输出的数据,可以是变量、常量或表达式。输出列表中的每个数据与格式控制字符串中的格式说明符按顺序一一对应。
函数返回值
- 成功后,将返回写入的字符总数。
- 如果发生写入错误,则会设置错误指示符(错误)并返回负数。
示例代码
- 输出整数:
#include <stdio.h>
int main() {
int a = 5;
printf("整数 a 的值为:%d\n", a);
return 0;
}
- 输出浮点数:
#include <stdio.h>
int main() {
double pi = 3.14159;
printf("圆周率的值约为:%lf\n", pi);
return 0;
}
- 输出多个不同类型的数据:
#include <stdio.h>
int main() {
int age = 25;
char gender = 'M';
double height = 175.5;
printf("年龄:%d 岁,性别:%c,身高:%lf 厘米\n", age, gender, height);
return 0;
}
附加格式说明符
- 在
%
和格式字符之间还可以插入附加格式说明符来进一步控制输出格式。- 例如:
%5d
表示输出的整数占 5 个字符宽度(右对齐),如果不足 5 位则在左边补空格;%-5d
则是左对齐;%.2f
表示输出浮点数保留 2 位小数等。
- 例如:
#include <stdio.h>
int main() {
double num = 3.14159;
// 使用 %.2f 格式控制符来保留两位小数输出
printf("%.2f\n", num);
return 0;
}
scanf
scanf
函数的基本概念
scanf
是 C 语言中的一个标准输入函数,用于从标准输入(通常是键盘)读取各种类型的数据,并按照指定的格式将数据存储到相应的变量中。
scanf
函数的基本使用格式
scanf
函数的一般形式为:scanf("格式控制字符串", 变量地址列表);
- 格式控制字符串:它指定了输入数据的格式。格式控制字符串由格式说明符和普通字符组成。
- 格式说明符:以
%
开头,后面跟一个特定的字符,表示要读取的数据类型。例如,%d
用于读取整数,%f
用于读取浮点数,%c
用于读取单个字符,%s
用于读取字符串等。 - 普通字符:在输入时需要原样输入的字符,比如在
scanf("%d,%d", &a, &b);
中,逗号,
就是普通字符,输入时需要输入3,5
这样的形式(假设a
和b
是整数变量)。
- 格式说明符:以
- 变量地址列表:这是一个或多个变量的地址,用于存储读取到的数据。对于普通变量,需要在变量名前加上
&
运算符来获取变量的地址。例如,&a
表示变量a
的地址。
示例代码
以下是一些scanf
函数使用的示例:
- 读取整数:
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
printf("你输入的整数是:%d\n", num);
return 0;
}
- 读取浮点数:
#include <stdio.h>
int main() {
float fnum;
printf("请输入一个浮点数:");
scanf("%f", &fnum);
printf("你输入的浮点数是:%f\n", fnum);
return 0;
}
- 读取多个值:
#include <stdio.h>
int main() {
int a, b;
printf("请输入两个整数,中间用空格隔开:");
scanf("%d %d", &a, &b);
printf("你输入的两个整数分别是:%d 和 %d\n", a, b);
return 0;
}
注意事项
- 格式控制字符串中的格式说明符和变量地址列表中的变量要一一对应,且类型匹配,否则可能会导致错误的输入结果。
scanf
函数在读取字符串(%s
)时,不会检查数组是否越界,所以在使用%s
读取字符串时要确保字符数组有足够的空间来存储输入的字符串,以避免缓冲区溢出错误。- 在%c的前面写一个空格,会消化掉输入缓冲区前面所有的空白字符,然后读取一个字符。
int ch=0;
while(scanf(" %c", &ch) != EOF)
//%d 在读取的时候,会跳过空格
//%c 会把空格当空格。
//一直从键盘-标准输入流读取数据存放到ch中,除非遇到EOF文件结束符就结束读取。
其他
- 数据类型丰富,空间利用率更高。
- c++plus官网 :
http://www.cplusplus.com/
- 大小写转换函数
int main()
{
int ch = 0;
while((ch=getchar)) != EOF)
{
//如果不是小写,转小写
if(islower(ch))
{
printf("%c\n", toupper(ch));
}
else //如果是大写转小写
{
printf("%c\n", tolower(ch));
}
getchar();
}
return 0;
}