C语言数据类型、存储类型

一、数据类型
基本类型:int、char、int、float、double
构造类型:数组(一维数组、二维数组、指针数组、函数指针数组、结构体数组……)、结构体、共用体
指针:一维指针、二维指针、数组指针、函数指针、结构体指针
空类型:void,该类型也叫缺省型,用于描述值为空集,主要用于说明不返回值的函数或指向任一类型的指针等
1、32位计算机,各种数据类型所占字节数是:
char = 1;short = 2;int = 4;long = 4;float = 4;double = 8(实型数据的存储方式不同于其他基本数据类型)
2、bool类型
bool类型数据的值,是真或者非真,-即:0/1(非0即为真)
定义时需加上:#include<stdbool.h>
用的时候不需要专门声明。

3、char型数据
字符型数据,就是占用1个字节,8位,赋值范围要注意
unsigned char(无符号)
signed char(有符号)
如果给char型数据赋值超过范围,则会溢出。

溢出原则,“保留低位,舍弃高位”
4、字符常量
char a = 'a'和char a = 97等价,字符常量'a'的ASCII码是97
5、字符串常量
定义:用双引号括起来的字符,就是字符串常量。

char *p = “hello”;
“helllo”“你好吗,世界!”
每个字符串常量后面都会有一个“******\0”
\0用来表示字符串结束
6、define与typedef(注意两者格式的区别)
typedef是关键字,为已有类型取别名(如typedef unsigned int unit)
define是宏定义,仅仅进行简单的文本替换(#define TYPE 100)
举例:#define unit_pint*
unit_pa,b表示的是int *a,b;(b为int型)
typedefint * unit_p
unit_pa,b;表示的是int *a;int *b;
#include <stdio.h>
#define N 3.0e-23
#define M 950
int main(int argc, const char *argv[])
{
double a;
scanf("%lf",&a);
printf("%.2e\n",a * M / N);
return 0;
}
7、sizeof(关键字)
这个是计算数据占用字节数的运算符,只针对数据类型,不针对变量。

返回值:是括号内数据占用的字节数。

比如:int a = 5;则sizeof(a)和sizeof(int) = 4;sizeof(short int)=2;32位系统中,指针是占4个字节
利用指针判断所使用系统是多少位的系统
int *p = NULL;printf("%d\n",sizeof(p));32位系统中,指针是占4个字节;64位系统中,指针是占8个字节
8、带参宏定义define
对于带参宏定义不仅应在参数两侧加括号,还应在整个符号串外加括号,才能保证大部分情况下不出错。

而有些时候就算已经这样做了,还是不能得到我们想要的结果。

#include <stdio.h>
#define SQ(y) ((y)*(y))
int main()
{
inti = 1;
while(i<= 5){
printf("%d ",SQ(i ++));
}
return 0;
}
结果:1 9 25
#include <stdio.h>
int SQ(int y)
{
return (y * y);
}
int main()
{
inti = 1;
while(i<= 5){
printf("%d ",SQ(i ++));
}
return 0;
}
结果:1 4 9 16 25
以上两段程序说明了带参宏定义和函数之间是有很大差别的
编译器是在程序的预编译阶段对宏进行处理的,主要是用预编译指令来替换源文件中的宏。

(1)宏会在编译器在对源代码进行编译的时候进行简单替换,不会进行任何逻辑检测,即简单代码复制而已。

(2)宏进行定义时不会考虑参数的类型。

(3)参数宏的使用会使具有同一作用的代码块在目标文件中存在多个副本,即会增长目标文件的大小。

(4)参数宏的运行速度会比函数快,因为不需要参数压栈/出栈操作。

(5)参数宏在定义时要多加小心,多加括号。

(6)函数只在目标文件中存在一处,比较节省程序空间。

(7)函数的调用会牵扯到参数的传递,压栈/出栈操作,速度相对较慢。

(8)函数的参数存在传值和传地址(指针)的问题,参数宏不存在。

二、存储类型
存储类型:auto、register、static、extern
全局变量:存放在静态区
局部变量:静态区、栈区、堆区
1、局部变量
关键字:auto,它的作用域:就是它所在函数的花括号{}内部。

定义:定义在函数内部,随着函数的执行而分配栈区,随着函数的调用产生,随着函数的退出而消失。

当一个自动变量没有被初始化,它的值是默认的随机值。

局部变量定义在一个函数内部,那么它只在这个函数内部有效。

2、全局变量
不能用auto来修饰,不是自动变量
定义:定义在函数外部,一般是定义在文件头的位置。

如果初始化了全局变量,那么它会被分配到data段,data段的数据会被原样保存到磁盘中。

#include<stdio.h>
int s;//全局变量未初始化,会被分配到BSS段,该段在程序加载初期会被自动清零。

所以没初始化前,它的默认值是0。

intsd = 1024;//如果初始化了全局变量,那么它会被分配到data段,data段的数据会被原样保存到磁盘中。

//全局变量在程序加载时就被初始化
//全局变量初始化后在内存中分配了固定的地址;
int main()
{
int a = 1;//局部变量在程序调用的时候才会被初始化;
//局部变量调用时,被分配地址是随着每次调用、释放变化的。

return (0);
}
3、变量作用域
局部变量的名称作用域在一个花括号之间
作用域小的名称,将覆盖掉作用域大的名称
一个工程里不能有两个重名的全局变量
4、static静态存储类型
用static声明一个静态变量,那么这个静态变量和全局变量同等对待,放到静态区,在程序被加载时被初始化,之后不再执行初始化;静态局部变量和全局变量,只是作用域和名称不一样,其它的属性都一样(参照上一文档的图)
5、用static声明一个全局变量的用法
extern声明引用一个外部变量。

比如:两个程序文件,a文件可以通过extern 声明引用b文件里面的变量,在编译的时候要将两个程序文件同时编译。

static int a=0;用static修饰一个全局变量,那么这个全局变量的作用域仅限于本文件;修饰一个函数的话,效果相同。

总结:用static修饰一个局部变量,那么这个局部变量的作用相当于全局变量;
用static修饰一个全局变量,那么这个全局变量仅限于它所在文件使用,而不能通过extern声明而被另外的文件使用;
用static修饰一个函数,那么这个函数的作用域仅限于它所在的文件,而不能通过extern声明而被另外的文件使用;
extern的作用:可以声明函数,也可以声明变量。

它的作用是,通过extern 声明后,即使本文件中没有该变量和文件,那么也可以通过声明从别的文件中进行引用或者调用。

6、大端序和小端序
小端序:低地址存低字节;大端序:低地址存高字节
int a = 0X12345678(78为低字节)
char *q = (char *)&a;q相较于q+1为低地址
可以打印比较q和q+1的值,判断所使用系统是大端序还是小端序。

合集下载

c语言中整型数据的存储形式

c语言中整型数据的存储形式

c语言中整型数据的存储形式在C语言中,整型数据(Integer)在内存中的存储形式是固定长度的二进制数。

它们可以是带符号数或无符号数,以及不同的长度和大小。

先说一下带符号数。

带符号整型数据可以表示负值。

在C语言中,最常用的带符号整型数据类型是int(整型),它占用4个字节(32位),可以表示从-2147483648到2147483647的整数值。

在存储带符号整型数据时,使用的是“二进制补码”(Two's Complement)表示法。

这种表示法是如此普遍的原因是它符合自然的加减运算法则,同时可以在CPU中用简单的电路实现。

比如,如果要存储-5这个数,首先将它的绝对值转化成二进制:5的二进制是101,接着将所有位取反得到010,最后加1得到011,这就是-5以二进制补码形式的存储形式:11111111 1111 1011。

再说说无符号整型数据(Unsigned Integer)。

它只能表示正整数,但在同样大小的空间内可以存储更大的值。

在C语言中,最常用的无符号整型数据类型是unsigned(无符号整数),它占用4个字节(32位),可以表示从0到4294967295的正整数值。

在存储无符号整型数据时,直接使用二进制表示这个数即可。

比如,如果要存储123这个数,直接将它转化成二进制即可:0111 1011。

除了int和unsigned,还有short(短整型)和long(长整型)等整型数据类型。

它们分别占用2个字节和8个字节。

这些数据类型在不同的编译器中占用的字节数可能不同。

无论用哪种整型数据类型,在内存中存储一个整型数据需要使用一块固定长度的内存空间。

对于32位的int,就需要4个字节的内存空间。

每个字节(Byte)由8个比特(Bit)组成,因此int变量会占用32个比特的空间。

这32个比特的位序(Bit Order)在不同的编译器和计算机体系结构中可能不同。

在存储整型数据时,常常需要考虑大小端(Endianness)的问题。

c语言提供的基本数据类型

c语言提供的基本数据类型

C语言提供的基本数据类型一、什么是数据类型在计算机编程中,数据类型是指一组值的集合以及定义在这组值上的一组操作。

不同的数据类型决定了数据的存储方式和可执行的操作。

C语言作为一种通用的编程语言,提供了一些基本的数据类型,用于表示不同种类的数据。

二、C语言的基本数据类型C语言提供了以下基本数据类型:1.整型(int):用于表示整数,包括正整数、负整数和零。

2.浮点型(float):用于表示小数,包括带小数点的数值。

3.字符型(char):用于表示字符,包括字母、数字和特殊字符。

4.双精度浮点型(double):用于表示更大范围的小数,具有更高的精度。

5.短整型(short):用于表示较小范围的整数,可以节省内存空间。

6.长整型(long):用于表示较大范围的整数,可以存储更大的数值。

7.无符号整型(unsigned):用于表示非负整数,可以扩大整数的范围。

三、整型数据类型整型数据类型用于表示整数,包括正整数、负整数和零。

在C语言中,整型数据类型有不同的范围和存储空间。

3.1 int类型int类型是C语言中最常用的整型数据类型,通常占用4个字节(32位),可以表示-2147483648到2147483647之间的整数。

例如:int num = 10;3.2 short类型short类型是一个较小范围的整型数据类型,通常占用2个字节(16位),可以表示-32768到32767之间的整数。

例如:short num = 100;3.3 long类型long类型是一个较大范围的整型数据类型,通常占用4个字节(32位),可以表示-2147483648到2147483647之间的整数。

例如:long num = 1000000;3.4 unsigned类型unsigned类型是一个无符号整型数据类型,可以表示非负整数。

它可以扩大整数的范围,但不能表示负数。

例如:unsigned int num = 100;四、浮点型数据类型浮点型数据类型用于表示小数,包括带小数点的数值。

c语言中各种类型的字节

c语言中各种类型的字节

c语言中各种类型的字节
在C语言中,有几种不同的数据类型,每种类型在内存中占用
的字节数也不同。

以下是C语言中常见数据类型的字节大小:
1. char类型,通常占用1个字节,表示8位二进制数据,范
围为-128到127或0到255,取决于是否使用有符号或无符号类型。

2. int类型,通常占用4个字节,表示32位二进制数据,范
围为-2147483648到2147483647。

3. float类型,通常占用4个字节,用于存储单精度浮点数,
可以表示大约6到7位有效数字。

4. double类型,通常占用8个字节,用于存储双精度浮点数,可以表示大约15到16位有效数字。

5. short类型,通常占用2个字节,表示16位二进制数据,
范围为-32768到32767。

6. long类型,通常占用4个或8个字节,取决于编译器和操
作系统,表示32位或64位二进制数据,范围为-2147483648到2147483647或-9223372036854775808到9223372036854775807。

除了上述基本数据类型外,C语言还支持结构体、联合体和枚举类型,它们的字节大小取决于其成员变量的类型和对齐方式。

需要注意的是,C语言标准并没有规定各种数据类型具体的字节大小,而是由具体的编译器和操作系统来决定。

因此,在不同的平台上,这些数据类型的字节大小可能会有所不同。

c语言的数据类型表

c语言的数据类型表

c语言的数据类型表在C语言中,有几种基本的数据类型,它们可以用来存储不同类型的数据。

以下是C语言中常用的数据类型:1. 整数类型:- char:用于表示字符,通常占用一个字节。

- int:用于表示整数,通常占用四个字节。

- short:用于表示短整数,通常占用两个字节。

- long:用于表示长整数,通常占用四个或八个字节。

- unsigned修饰符可以用于表示无符号整数,如unsigned int。

2. 浮点数类型:- float:用于表示单精度浮点数,通常占用四个字节。

- double:用于表示双精度浮点数,通常占用八个字节。

- long double:用于表示扩展精度浮点数,占用的字节数较大。

3. 逻辑类型:- _Bool:用于表示逻辑值,只能存储true或false。

C99标准引入的数据类型。

- bool:与_Bool是相同的,但在引入标准库stdbool.h后可用。

4. 枚举类型:- enum:用于定义枚举类型,可以取一个或多个预定义的常量值。

5. 指针类型:- 指针类型用于存储变量的内存地址。

6. 结构体和联合体类型:- struct:用于定义结构体,通过将多个不同类型的变量组合在一起来创建新的数据类型。

- union:用于定义联合体,它允许在同一内存空间中存储不同类型的变量。

7. void类型:- void:用于表示没有类型,通常用于函数返回类型、指针类型和函数参数类型的声明。

以上是C语言中常用的数据类型。

通过选择适当的数据类型,可以有效地管理和操作不同类型的数据。

c语言中int,double,float的用法

c语言中int,double,float的用法

在C语言中,`int`、`double`和`float`是基本的数据类型,它们用于存储整数和浮点数。

1. `int`:这是一个整数类型,通常用于存储整数值。

在大多数系统中,`int`的大小是4字节(32位),但这也可能因系统而异。

例如,你可以声明一个`int`变量如下:
```c
int myInteger;
```
2. `double`:这是一个双精度浮点数类型,通常用于存储带有小数的数值。

`double`通常占用8字节(64位)的内存空间。

例如,你可以声明一个`double`变量如下:
```c
double myDouble;
```
3. `float`:这是一个单精度浮点数类型,与`double`类型相比,它使用的内存更少。

但是,请注意,精度可能会降低。

`float`通常占用4字节(32位)的内存空间。

例如,你可以声明一个`float`
变量如下:
```c
float myFloat;
```
在使用这些类型时,你应该根据你的需求选择最合适的类型。

例如,如果你知道你的数字不会有小数并且不会超过整型的范围,那么使用`int`可能会更有效率。

然而,如果你需要存储较大的数值或者有小数点的数值,那么应该使用`double`或`float`。

还要注意,当你从其他数据类型转换到浮点数时,可能会丢失精度。

例如,如果你将一个整数转换为浮点数,然后再次转换回整数,可能不会得到原始值,因为浮点数不能精确地表示所有的整数。

同样地,当将浮点数转换为整数时,小数部分会被丢弃。

c语言数据类型的分类

c语言数据类型的分类

c语言数据类型的分类C语言中的数据类型主要可以分为以下几类:1. 基本数据类型:基本数据类型是C语言中最基础的数据类型,用于表示简单的数据。

它们包括整型、浮点型、字符型和布尔型。

整型用于表示整数,可以分为有符号整型和无符号整型,如int和unsigned int。

浮点型用于表示带有小数部分的数值,可以分为单精度浮点型和双精度浮点型,如float和double。

字符型用于表示单个字符,如char。

布尔型用于表示逻辑值,只能取true或false。

2. 数组类型:数组是一种可以容纳多个相同类型元素的数据结构。

它们在内存中连续存储,并通过索引来访问每个元素。

数组可以是一维的,如int numbers[10],也可以是多维的,如int matrix[3][3]。

数组在声明时需要指定元素的类型和大小。

3. 指针类型:指针是C语言中非常重要的概念,它用于存储变量的内存地址。

指针类型是一种特殊的数据类型,它可以指向其他类型的数据。

通过指针,可以间接访问和修改指针指向的变量。

指针的声明需要指定指向的数据类型,如int *ptr。

指针在C语言中经常用于动态内存分配、访问数组和函数指针等场景。

4. 结构体类型:结构体是一种用户自定义的数据类型,可以包含多个不同类型的成员变量。

通过结构体,可以将相关的数据组织在一起,形成一个逻辑上的整体。

结构体的声明需要定义其成员变量的类型和名称,如struct student {char name[20]; int age;}。

结构体可以嵌套使用,也可以通过点操作符访问其成员变量。

5. 枚举类型:枚举类型用于定义一组具有离散取值的常量。

通过枚举,可以将一组相关的常量进行命名和分类。

枚举类型的定义形式为enum,如enum color {RED, GREEN, BLUE}。

在枚举类型中,每个常量都有一个对应的整数值,默认从0开始递增。

6. 联合类型:联合类型是一种特殊的数据类型,可以在相同的内存位置存储不同的数据类型。

C语言基本数据类型


0.0314159 +2
数字部分 指 数 (尾数) (阶码)
<
字符常量
• 定义:用单引号括起来的单个普通字符或转义字符.
例转义••转字字转义符符义字转常字符义量符举字的:例反符如值含(斜c及义:h‘线2其该_a后0含’字0面1义符.‘cA跟:,的c’h一转A2‘?S_个义C0’字I0字I4符‘码.符\cn)值或’ 一‘\1个01代含’ 码义值表示 m{} \\\\\vnaar‘ppppirrrrniiii<(nnnn)如ttttffff((((""""IT\\‘‘‘例1\Cu\\s036例‘a如r\1A70{}垂Py1bm6’单’:\:0or-x直’\换回响1oa-"引4-\p-’gi-‘‘'制H-行车铃-2nCr--r号---i(-oa表-C-A0\n-)--'-wm-’’’-"t\--\——-nf--1)\-(a--";\-“0--\r——--)n-Y1e--;’-’"’0\64-y-b)’--58o;‘-=,Au-’\-,?n’--\”\\\"’‘‘\\tfb‘‘)\\“\\\\x;nx4n‘a4\68"’’10—13—)’1;’’-2—-—--’运 AI\T--Cs-u--1-运 屏 打a9B-行--rP0-y-7--b--行 幕 印--:rC结,o--”-6o---H结显机5g--果‘-C---or水--果示输(a:’w--m’-退换反双平::出)a-(a屏\-’r格页斜引制’:=e\幕n线号表¥y’显ou示?”)
{
in•t可i =用0;sizeof(类型标识符)测量
printf ("char: %d bytes.\n",sizeof(char));

c语言的实型数据在内存中的存储形式

c语言的实型数据在内存中的存储形式C语言中实型数据包括float和double两种类型。

在内存中,实型数据的存储形式是按照IEEE 754标准进行的。

IEEE 754标准规定,实型数据的内存存储格式由三部分组成:符号位、指数位和尾数位。

首先,符号位用来表示实型数据的正负,占据了整个实型数据存储单元的最高位,因为C语言的实型数据是有符号的。

其次,指数位用来表示实型数据在二进制下的阶码,它的长度与数据类型有关。

在float类型中,指数位的长度为8位,其中最高位是符号位,因此实数的阶码范围是-127到128。

而在double类型中,指数位的长度为11位,阶码范围是-1023到1024。

最后,尾数位用来表示实型数据在二进制下的有效数字,也就是实数的小数部分。

在float类型中,尾数位的长度为23位,而在double类型中,尾数位的长度为52位。

实型数据的存储方式与其大小有关,float类型实型变量占用4个字节的内存空间,而double类型实型变量占用8个字节的内存空间。

因此,可以将float类型实型数据的存储过程表示为:(1)将浮点数转换为二进制数。

(2)以符号位、指数位和尾数位的顺序将二进制数按位存储到内存中,其中符号位占据了最高位,指数位占据了接下来的8位,尾数位占据了剩下的23位。

而double类型实型数据的存储过程与之类似,不过指数位占据了11位,尾数位占据了52位。

总之,C语言中实型数据在内存中的存储方式是按照IEEE 754标准规定的。

了解实型数据的内存存储方式对于理解C语言的应用和程序的优化有着重要的作用。

c语言存储数据的方式

c语言存储数据的方式C语言是一种广泛应用于计算机科学领域的编程语言,它提供了多种存储数据的方式。

本文将介绍几种常见的C语言数据存储方式,包括变量、数组、结构体、枚举和指针。

1. 变量变量是C语言中最基本的数据存储方式。

通过声明变量可以为不同类型的数据分配内存空间,并可以对其进行读取和修改。

常见的变量类型包括整型、浮点型、字符型等。

例如,可以使用int型变量来存储整数,float型变量来存储浮点数,char型变量来存储字符。

2. 数组数组是一种按顺序存储相同类型数据的集合。

通过声明数组可以在内存中分配一块连续的空间来存储数据。

数组的元素可以通过索引访问,索引从0开始。

例如,可以使用int型数组来存储一组整数,float型数组来存储一组浮点数,char型数组来存储一组字符。

3. 结构体结构体是一种自定义的数据类型,可以将多个不同类型的数据组合在一起。

通过声明结构体可以定义一个包含多个成员的数据结构,并可以为每个成员分配内存空间。

结构体的成员可以通过.运算符来访问。

例如,可以使用struct关键字定义一个学生结构体,包含姓名、年龄和成绩等成员。

4. 枚举枚举是一种自定义的数据类型,用于定义一组相关的常量。

通过声明枚举可以为每个常量分配一个整数值,并可以使用这些常量来表示特定的状态或选项。

例如,可以使用enum关键字定义一个颜色枚举,包含红、绿、蓝等常量。

5. 指针指针是一种特殊的变量,用于存储内存地址。

通过声明指针可以指向其他变量或数据结构的内存地址,并可以通过解引用操作符*来访问指针所指向的值。

指针在C语言中常用于动态内存分配和函数传参等场景。

例如,可以使用int型指针来存储一个整数变量的内存地址,char型指针来存储一个字符数组的内存地址。

总结起来,C语言提供了多种灵活的数据存储方式,包括变量、数组、结构体、枚举和指针。

合理选择不同的数据存储方式可以根据实际需求来提高程序的效率和可读性。

在实际编程中,根据数据类型和数据结构的特点,选择合适的存储方式是非常重要的。

C语言程序设计 第2章 数据类型


2.2常量和变量 变量名与变量值的关系:
2.2常量和变量
变量的使用:先定义后使用
变量定义的一般形式:
数据类型 变量名1,变量名2,…,变量名n;
2.2常量和变量
➢ 凡未被事先定义的,系统不把它认作变量名,这就 能保证程序中变量名使用的正确
例:varname,在使用的时候误写成vaname
➢ 在定义变量时要指定变量的类型,在编译时就能为 变量分配相应的存储单元
5
2.2常量和变量
甘草 三七 干姜 葛根
枸杞 人参 陈皮 地黄
山药 当归 谷芽 黄连
贴上标签 加以区分
用标识符给变量起名字
2.2常量和变量 变量命名规则
➢ 只能由字母(a~z,A~Z)、数字(0~9)和下划线(_)构 成
➢ 第一个字符不能为数字 ➢ 不能与关键字同名
例:a9,_a, A_num √ 9a, a*num,int ×
控制语句:控制语句用于控制程序的流程。 C语言提供三类控制语句: ➢ 选择语句 ➢ 循环语句 ➢ 转移语句。 控制语句会在第三章和第四章详细介绍。
2.7 表达式与语句
复合语句: 复合语句由一对大括号括起来的一 条或多条语句组成。 例:{
turnOn(0,3); turnOn(0,4); turnOn(0,5); turnOn(1,4); }
2.7 表达式与语句
表达式语句:表达式末尾加上“;”就构成一条 表达式语句。 例:
s = 3.14 * r * r; 就是一条赋值表达式语句。表达式语句最后的 分号是语句中必不可少的一部分。
2.7 表达式与语句
函数调用语句:函数调用语句由函数调用加分 号构成。 例:
turnOn(1,1);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档