1. 变量
1.1变量的概念
变量就是在程序中可以发生变化的量,变量有类型。
变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。(1字节=8位)
1.2定义格式
存储类型 数据类型 变量名;
例如:(auto) int a;
-
变量名是标识符,要符合标识符命名规则。
-
存储类型:变量存储的位置。
-
数据类型包含:名字 字节 取值范围
类型 | 存储大小 | 值范围 | |
---|---|---|---|
char | 字符类型 | 1 字节 | -2^7 到 (2^7-1) |
unsigned char | 无符号字符类型 | 1 字节 | 0 到 (2^8-1) |
int | 整数类型 | 4 字节 | -2^31 到 (2^31-1) |
unsigned int | 无符号整数类型 | 4 字节 | 0 到 (2^32-1) |
short | 短整型 | 2 字节 | -2^15 到 (2^15-1) |
unsigned short | 无符号短整形 | 2 字节 | 0 到 (2^16-1) |
long | 长整型 | 4 字节 | -2^31 到 (2^31-1) |
unsigned long | 无符号长整形 | 4 字节 | 0 到 (2^32-1) |
float | 单精度浮点型 | 4字节 | 有效数据6-7位 |
double | 双精度浮点型 | 8字节 | 有效数据15-16位 |
1.3 初始化格式**
(1)可以定义的时候初始化
int a=0;
(2)先定义后初始化
int a;
a=0;
1.4 局部变量和全局变量
(1)生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。也就是存活的周期时间。时间维度。
(2)作用域:变量可以起作用的范围。空间维度。
(3)内存的五个区域:
注意🚨🚨🚨:初始化未0的全局变量和静态变量存放在.bss区
👉问:为什么未初始化的全局变量和静态变量的初值为0?
🧐答:因为这两种变量都存放在.bss
📢局部变量和全部变量的区别:
局部变量 | 全局变量 | |
---|---|---|
定义位置 | 函数体内部 | 函数体外部 |
存储位置 | 栈区 | 全局区 |
生命周期 | 同函数体共存亡 | 同整个程序共存亡 |
作用域 | 作用于函数体内部 | 作用于整个程序 |
初值 | 未初始化时,是一个随机值 | 未初始化时,值为0 |
例子:
#include <stdio.h>
int b;
int main(int argc, const char *argv[])
{
int a;
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
2. 常量
2.1 概念
程序运行中不会发生变化的量叫常量,存放在常量区。
2.2 分类
2.2.1 字符型常量
类型为char,从ASCII表中找到的字符都是字符型常量,不可以改变。用单引号括起来的就是字符常量,例如‘A’。
类型 | 存储大小 | 值范围 | |
---|---|---|---|
char | 字符类型 | 1 字节 | -128 到 127 |
unsigned char | 无符号字符类型 | 1 字节 | 0 到 255 |
signed char | 带符号字符类型 | 1 字节 | -128 到 127 |
原码、反码和补码:
-
(1)最高位表示符号位,正数时0,负数是1。
-
(2)正数的原码、反码和补码都一样。
-
(3)负数要用补码来计算:
**原码 **就是直接在数值前面加上符号表示
反码 等于原码的符号位不变,其他位按位取反
补码 等于反码加一
例如:-5
原码:1000 0101
反码:1111 1010
补码:1111 1011
用 ’ ’ 括起来的就是字符常量:
‘a’ 字符a
‘\0’ 空字符
‘\n’ 换行
用法:
char c='b';
char a='\101';
printf("%c\n",'A');
printf("%c\n",65);
printf("%c\n",'\x42');
printf("%c\n",c);
printf("%c\n",a);
printf("%c\n",a+32);
👉因为C规定转义字符 ‘\x41’ 中\是转义字符引导符,后跟一个x表示x后面的数字是十六进制表示法,用’ '括起来表示一字节ASCII码。\转义符后面加数字代表转义成八进制的字符,后面的数字是八进制。
2.2.2 字符串常量
用“”括起来的就是字符串,例如“hello”,字符串最后跟一个’\0’🚨。
例如:
printf("%s\n","hello");
2.2.3 整型常量
整型常量就是类型为整数的常量,包括从负数到零到正数的所有整数。
可以用二进制、八进制、十进制和十六进制表示。
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a=10;//把整型常量赋值给整型变量
printf("%d\n",a);
printf("%d\n",10); //十进制
printf("%d\n",0b1111); //二进制
printf("%d\n",010); //八进制
printf("%d\n",0xF); //十六进制
return 0;
}
2.2.4 浮点型常量
浮点型常量就是类型为浮点数的常量,包括从负数到零到正数的所有浮点数。有float型和double型。
2.2.5 指数常量
即用科学计数法进行数据的表示。
例如:👇
300000000=3*10^8→3e8
0.0000012=1.2*10^-6→1.2e-6
例子:
float f=80000;
printf("%e %e\n",0.0000012,f);
2.2.6 标识常量(宏定义)
宏定义:起到标识作用
-
(1)只是单纯的文本替换,在预处理的时候进行的
-
(2)遵循标识符命名规则
-
(3)一般用大写标识
格式:
#define 宏名 常量或表达式
📢特点:单纯的文本替换,不能手动运算(原样替换)
例子:
#include <stdio.h>
#define ONE 1
#define TWO ONE+ONE
#define THREE ONE+TWO
int main(int argc, const char *argv[])
{
printf("%d\n",THREE);
return 0;
}//输出结果为:3
📢如果一个串长于一行,可在行尾用反斜线 “\” 续行
练习:文章来源:https://www.toymoban.com/news/detail-443649.html
#define N 2
#define M N+3 //M 2+3
#define NUM N+M/2+1 //2+2+3/2+1=6
void main()
{
int a = NUM;
printf("%d\n",a);
}//输出结果为:6
文章来源地址https://www.toymoban.com/news/detail-443649.html
到了这里,关于C语言——数据类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!