- 一. 数据类型分类
- 二. 基本数据类型
- 1. 布尔型 bool
- 2. 字符型 char
- 3. short,long,long long类型
- 4. int类型
- 三. 基本数据类型的常量
- 1. 整型常量
- 2. 浮点常量
- 3. 字符常量
- 4. 字符串常量
- 5. 标识常量
- 四. 变量
- 1. 变量的基础
- 2. 变量的声明与储存类型(auto, register, static, extern)
- 我们可以通过
sizeof
来确定字节长度
#include
int main(int argc, char *argv[])
{
printf("%lu %lu %lu %lu\n", sizeof(_Bool), sizeof(char), sizeof(short), sizeof(int));
return 0;
}
返回1 1 2 4
- 判断数字是否越界可以看
limits.h
这个头文件,可以在这个文件里看到每个数据类型的最大与最小取值
vi /usr/include/limits.h
1. 布尔型 bool
其中对于布尔型需要引入头文件
,如果不想引用头文件可以用_Bool
作为基本类型,但缺点是true
和false
没有被定义。这被定义在头文件
内。
#include
#include
int main(int argc, char *argv[])
{
bool a, b, c;
a = true; // true
b = false // false
c = -1; // true
}
2. 字符型 char
- char的取值范围及其编码
类型名称 | 长度(字节) | 值域 |
---|---|---|
char | 1 | -128 ~ 127 或 0 ~ 255 |
signed char | 1 | -128 ~ 127 |
unsigned char | 1 | 0 ~ 255 |
对signed char
来说最高位位符号位0表示正,1表示负,对正数来说可以表述
2
7
−
1
2^7-1
27−1个数。
对负数来说先复习以下补码。计算机中负数用补码表示
数字 | 原码 | 反码 | 补码 |
---|---|---|---|
-1 | 10000001 | 11111110 | 11111111 |
-127 | 11111111 | 10000000 | 1000001 |
-128 | 1000000 |
- char是字符型但同时也能表示整数
#include
int main(int argc, char *argv[])
{
char ch = 65;
printf("ch=%d %c\n", ch, ch);
return 0;
}
返回
ch=65 A
- 如果让
ch=128
超出了最大值127,其编码会是10000000
也就是上表中的-128,因此会返回ch=-128
- 如果用unsigned,也就是
unsigned char ch=-1
超出了最小值0,其编码会是11111111
也就是上表中的最大值255,因此会返回ch=255
类型名称 | 长度(字节) | 值域 |
---|---|---|
short (signed short) | 2 | -32768~32767 |
unsigned short | 2 | 0~65535 |
long | 4 | |
long long | 8 |
类型名称 | 长度(字节) | 值域 |
---|---|---|
int (signed int) | 4 | -2147483648~2147483647 |
unsigned int | 4 | 0~4294967295 |
#include
int main(){
int a = 0x12345678;
printf("%d %x %o\n", a, a, a) //打印十进制,十六进制,八进制
}
三. 基本数据类型的常量
常量指在程序运行期间其数值不发生变化的数据
1. 整型常量整数可以是十进制数、八进制数和十六进制数
- 八进制数:01234(八进制一个数代表3个二进制位)
- 十六进制数:0xd1c(十六进制一个数代表4个二进制位)
- 浮点常量又称为实数,一般含有小数部分
- 在C语言中,实数只有十进制的实数,分为单精度与双精度。
- 实数的表现方法有两种,即一般形式和指数形式
- 一般形式:1.1,1.2
- 指数形式:1.176e+10
可以结合Java-常亮与变量-学习笔记02来学习
3. 字符常量通常指单一字符,用单引号括起来。
一些规律
char a, b, c, d, e;
int x;
a = 'F'; //将70给a
b = 'A'+2 // C
c = ' ' + 'B' // b
d = 'b' - 32 // B
e = '0';
x = e-48 // 整数 0
4. 字符串常量
- 用双引号括起来。
- 字符串是以
'0'
结尾的
需要注意的是‘9'
不等于"9"
因为"9"
隐含'0'
。
char arr1[] = {"abc"};
char arr2[] = {'a', 'b', 'c', '}';// arr1 == arr2 #
5. 标识常量
define< <表示常量名称> #常量>
definePI 3.1415 #
通过下面的程序可以发现宏与正常的计算不同,宏是原样替代,而不是计算!
include#
define ONE 1 #
define TWO + ONE int ONE
main (int, argcchar * [argv])int
{
= a 10 ,= b 20 ,; c=
c + ONE * TWO + b ; a//计算结果是1+1+1*20+10=32 而不是 1+2*20+10=51 }
gcc -E define.c -o define.i
在终端输入
define.i
打开c = 1 + 1 + 1 * b + a;
,文件最后显示如下,可以看到5
# "deine.c" int
main (int, argcchar * [argv])int
{
= a 10 ,= b 20 ,; c=
c 1 + 1 + 1 * + b ; a}
1
+
2
∗
20
+
10
=
51
1+2*20+10=51
如果想算出1+2∗20+10=51#这个结果需要做一些更改
include#
define ONE 1 #
define TWO ( +ONE ) ONE//需要加括号 int
main (int, argcchar * [argv])int
{
= a 10 ,= b 20 ,; c=
c + ONE * TWO + b ; a}
由字母、数字、下划线组成,不能以数字开头,不能和关键字重名
四. 变量
1. 变量的基础
- 变量占据存储空间的大小由其数据类型决定
- 变量在内存空间中的首地址为变量的地址
auto int i;
- 变量说明的一般形式是:
<存储类型> <数据类型> <变量名>
- 一般
<存储类型>
默认缺省,存储类型有四种- auto:声明的是局部变量最常用(默认随机值)
int i;
与 - 必须是cpu能够接收的类型,比如说32位的计算机,大于32位的数据就存不了 一样
- auto:声明的是局部变量最常用(默认随机值)
- register:寄存器型,申请将变量放入CPU的寄存器中,以加快程序运行速度,若申请不到同auto
- 不能用
- 在内存中以固定的地址存放,而不是以堆栈形式存放的 取地址
&
- 只要程序没有结束就不会随着程序段的结束二小时,下次调用还会保留上次调用结果 int
= i1;while
( <i5)static{
int ; a//默认为0 ++
aprintf
("a=%d\n",) a;++
i}
a = 1
a = 2
a = 3
a = 4
returnextern_static1.c
- 定义两个文件
extern_static2.c
和extern_static1.c
。
- int
#= global_a 100 ;
exterm_static2.c
编译的时候需要将两个文件都放在一起用includeextern
; in global_a//这里需要申明 int main (int, argcchar * [argv])printf { ("global_a"=%,d\n") global_a;return 0 ;} gcc extern_static1.c extern_static2.c
extern_static1.c
- static,用了static再从外部调用就会报错
int = global_a 100 ;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)