C/C++教程

(20220119)C语言基本数据类型

本文主要是介绍(20220119)C语言基本数据类型,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、C语言程序程序代码:九九乘法表;(输出的内容由程序代码控制)

编写结果:

基本数据类型的结构框架图:

        基本类型:又称非构造性数据类型,其构造简单,是由系统事先定义好的。

        构造类型:又称复杂数据类型,一般由程序员将其它数据类型(包括构造类型本身)按一定的规则构造而成。

        指针类型:指针变量中只能存放地址(指针)。主要用于解决动态数据的建立、删除和使用。

        空类型: 主要用于数据类型的转换和定义函数的类型。

        C程序中的数据类型有常量和变量之分,分别属于以上这些数据类型。在程序中用到的所有数据都必须先定义后使用。

2、数据类型与存储类型

数据类型:类型名称、存储大小(字计数)、表示范围、内存中的表示(补码),基本操作

存储类型:生命周期、可见范围、占据内存是否释放

3、对于数组的操作(就是对数组元素的操作)

        所含数据都是同种类型的; 

        一个元素一个元素的操作,不存在整体操作;数组名不能作为左值;[ ] 为下标运算符;

        a[10]没有用完,需要加 "\0"结束符(人为)

4、变量(可变)

        是指:对内存空间的映射(内存地址与变量之间的映射)

        直接寻址:访问变量名

        间接寻址:访问地址(*p);

        const 只读变量

        变量的存储类型:

         auto :自动;static:静态,(全局数据区);register:(CPU中) 定义的基本数据类型调用到寄存器中,多用于单片机;extern: 声明;

        每个进程运行所需的空间称为进程的虚拟地址空间。32位操作系统中该空间大小为4G(2 32次方)。分配方法一在硬盘上开辟虚拟内存空间,二采用软件实现(写时复制),在内存中给每个进程映射。

        

        栈空间:默认值为垃圾值,周期与函数相同,空间固定

        堆空间:空间可以扩展

        全局数据区:默认值为0;周期与程序相同

        txt:代码只读区

        全局变量:所有文件都能使用 (全局数据区)

        全局静态变量(全局数据区):作用范围局限于它的源文件,即只有本文件内的代码才可以访问它,变量名在其他文件内不可见

        局部静态变量(全局数据区):局限于特定函数,但出作用域并不释放,在函数体内的静态变量的值也能够维持

        静态函数:作用范围仅限于它的源文件,即只有本文件内才能够调用,函数名在其他文件不可见

        存放位置:程序开始时,存放在全局数据区,结束时释放空间,默认初始化值是0,使用时可改变其值;

5、字符类型:char

        无字符串类型(c语言 中用数组处理)

        字符串的处理需要用到字符数组;

6、short (两个字节) ;int(等于CPU字长(数据总线的条数),可以读的二进制的位数);long(4个字节,32位);long long (8个字节,地址总线)

7、数据类型(数据范围)

        1 char

        char类型占一个字节

        有符号:char或者 signed char

        取值范围:-2^7 - 2^7-1 ---> -128 - 127

        无符号: unsigned char

        取值范围:0 - 2^8-1 --> 0 - 255

        2 short

        short类型占两个字节

        有符号:short或者 signed short

        取值范围:-2^16/2 - 2^15-1 ---> -32768 - 32767

        无符号: unsigned short

        取值范围:0 - 2^16-1 --> 0 - 65535

        3 int

        int类型占四个字节

        有符号:int或者 signed int

        取值范围:-2^32/2 - 2^31-1 ---> -2,147,483,648 - 2,147,483,647

        无符号: unsigned int

        取值范围:0 - 2^32-1 --> 0 - 4,294,967,295

        4 long

        long类型在32位操作系统占四个字节,在64位操作系统占8个字节

        有符号:long或者 signed long

        取值范围:-2^64/2 - 2^63-1

        无符号: unsigned long

        取值范围:0 - 2^64-1

        5 float            浮点            10-38~1038

        6 double        双精度型        10-308~10308

8、实数不能精确表示0;实数之间的比较用精度(差值)

9、计算机中的表示

        整数:用补码表示(不用补码,0就会有两种表示方法)

        58 - 100 = 11010110

        实数:用 尾数(表示数值),指数(表示小数) 来表示

        字符类型:用ASCII码表示

        计算机只会做加法

10、sizeof 与 strlen 的区别

        s = "hello"

        sizeof(s) =  6 ;包含了"\0" (sizeof 求对象在内存中所占的字节数)

        strlen(s) = 5; 遇到"\0"就结束;

 strlen(a)  =  255;

11、\a :报警 响铃(压到键盘);\b:退格; \d :(tab 键);\v :纵向挑格; \r 回车 不换行

        \n :换行 ; \f :走纸换页  (打印机); \ddd : (1到3位 8 进制数),\101  表示:'A'  65

        \xhh  (1到 2位  16 进制) \x41  ‘A’  65 

12、小的类型 放在长的类型中,用最高位扩展,即用符号位补齐。

        用7位ASCII码,汉字占两个字节;

13、类型操作

        (++  --)用于 int ; (%) 用于 int ;  (余数与被除数的正负相同)

14、结构体(struct)与(union 共用体)

        结构体:所占空间为所有空间之和;第一个成员的地址也是结构体类型的初始地址;但是成员的指针类型与结构体的不一样

        共用体:类型变量不能取成员的地址(内存中才存在地址)

        内存:一个字节一个编号(一个单元);整形不能给指针类型赋值;

15、void *p 万用指针(可以转化为其他类型指针用)

16、 typedef 类型定义(重新命名),不生成新类型

17、const 只读变量

18、printf(  )函数

        功能:向终端输出若干个任意指定类型的数据

        格式:printf("格式控制(修饰符)",参数表列);

        格式控制:

         修饰符:

 

        

         getch:接受一个任意键的输入,不用按回车就返回。该函数的返回值是所输入字符的ASCII码,且该函数的输入不会自动显示在屏幕上(无回显)  用#include<conio.h>

        getche:有返回显示 ;用#include<conio.h>

        getch(),getche()没有用到缓冲区。 

        getchar:从键盘读取一个字符并输出,该函数的返回值是输入第一个字符的ASCII码;若用户输入的是一连串字符,函数直到用户输入回车时结束,输入的字符连同回车一起存入键盘缓冲区.

 19、 scanf(  )函数

        功能:等待用户从键盘上输入数据,然后按格式控制的要求对数据进行转换后送到相应的变量地址中去。

        格式:scanf(“格式控制”,地址表列);

        注意:数据输入过程中产生的垃圾的处理方法!!

 

 20、优先级

        单目运算符  > 双目运算符

        算数运算符 > 关系运算符 >  逻辑运算符

 21、初始化与赋值

        初始化 : int a = 7;  

        赋值:  int  a;  a = 7;

        默认初始化 : 全局变量  为 0; 局部变量为 垃圾值;

        人工初始化 : int a ; a = 7;

22、野指针

野指针含义:

野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

野指针的形成:

指针变量未初始化; 指针释放后之后未置空;  指针操作超越变量作用域;

野指针危害:

野指针很可能触发运行时段错误( Sgmentation fault)

因为指针变量在定义时如果未初始化,值也是随机的。指针变量的值其实就是别的变量(指针所指向的那个变量)的地址,所以意味着这个指针指向了一个地址是不确定的变量,这时候去解引用就是去访问这个地址不确定的变量,所以结果是不可知的

野指针因为指向地址是不可预知的,所以有3种情况:

第一种是指向不可访问(操作系统不允许访问的敏感地址,譬如内核空间)的地址,结果是触发段错误,这种算是最好的情况了。

第二种是指向一个可用的、而且没什么特别意义的空间(譬如我们曾经使用过但是已经不用的栈空间或堆空间),这时候程序运行不会出错,也不会对当前程序造成损害,这种情况下会掩盖你的程序错误,让你以为程序没问题,其实是有问题的。

第三种情况就是指向了一个可用的空间,而且这个空间其实在程序中正在被使用( 譬如说是程序的一个变量x),那么野指针的解引用就会刚好修改这个变量x的值,导致这个变量莫名其妙的被改变,程序出现离奇的错误。工般最终都会导致程序崩溃,或者数据被损害,这种危害是最大的。

野指针的解决方法:

常规的做法是:

第一点:定义指针时,同时初始化为NULL

第二点:在指针解引用之前,先去判断这个指针是不是NuLL

第三点:指针使用完之后,将其赋值为NULL

第四点:在指针使用之前,将其赋值绑定给一个可用地址空间

这篇关于(20220119)C语言基本数据类型的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!