首页
社区
课程
招聘
[分享]C语言基础二-基本数据类型
2021-5-11 11:35 4092

[分享]C语言基础二-基本数据类型

2021-5-11 11:35
4092

基本数据类型

C语言中,有四种基本数据类型,分别是整型、浮点型、指针、聚合类型。

  • 整型:字符、短整型、整型、长整型,都分为有符号和无符号。
  • 浮点型:float、double,C语言中,定义浮点型的关键词是float,后缀为f,如果不加f,使用的时候默认是double类型。
  • 指针类型:指针也是一个变量,里面存放的值是一个地址。
  • 聚合类型:数组、结构体,数组保存同一数据类型的数据,随机访问速度快。结构体保存不同数据类型的数据,方便数据的管理。

字符和字符串

字符串的存储和交互,一共提出了2种概念:一种是C语言风格的,在字符后面以0结尾,代表是一个字符串;另一种是Pascal风格的,一般用前面两位给定大小,后面存储大小一样的字符,形成一个字符串。
C语言风格的优点是灵活性比较高,特别是在网络通信的时候,只要不是以0结尾,那么可以传输任意的字符;缺点是如果要找第N个字符,那么要一个一个的查找。Pascal风格的优点是长度固定,访问第N个的效率高,可以以跳板的形式访问;缺点是缺乏灵活性。

字符和字符串的区别

'a'和"a"的区别:字符a是可以访问Ascii编码的,字符串a则是引用的字符串的首地址。

C语言中的除法规则

在数学中有向上取整和向下取整,比如3/2=1.5,向下取整就是取不大于自己的最大整数,也就是1;向上取整就是取不小于自己的最大整数,也就是2。C语言中向0取整,使用右移符号时必须要判断商是否为负数。

溢出和进位的区别

  • 溢出:针对有符号数据的描述,当数据到达最大值的时候,如果再+1数据就会溢出,有可能变成负数,恢复代价大,也有可能不能恢复。
  • 进位:针对无符号数据的描述,当数据大小超过这个数据的范围时,就会产生进位,当前值还是有效的,可以通过一定的手段获得进位数据。

typedef关键字

C语言中,有typedef关键字,这个关键字的作用允许你为类型定义一个新的名字,也就是起个别名。例如:

1
2
typedef unsigned int DWORD
DWORD name = 0;

那么以后我们定义unsigned int类型的变量的时候,就不用再写unsigned int,直接写DWORD即可。
typedef关键字一般常用在结构体的定义和函数指针上。例如:

1
2
3
4
5
typedef struct MyStruct
{
    int nNumA;
    int nNumB;  
}MyStruct,* PMyStruct;

那么新的数据类型就是MyStruct,这个类型免去了每次定义的时候都加struct关键字。例如:

1
2
3
4
// 定义前
struct MyStruct tagStruct;
// 定义后
MyStruct tagStruct;

作用域

C语言中,编写的代码有作用域的限制。作用域是什么,简而言之,当我们定义变量的时候,这个变量的访问要在一定区域内才能进行。
函数作用域:比如你在A函数中定义变量nA,在B函数中定义变量nB,那么在B函数中是不能使用变量nA的。例如:

1
2
3
4
5
6
7
8
9
10
void funA()
{
    int nA = 1;
    printf("%d\r\n",nA);
}
void funB()
{
    int nB = 2;
    printf("%d\r\n",nB);
}

其中变量nA、nB的作用域是函数作用域,也就是{ }块语句包含的范围。
代码块作用域:主要靠{ }来区分,例如:

1
2
3
4
5
6
7
8
9
10
11
int main()
{
    int nA = 1;
    //块语句包围
    {
        int nA = 2;
        printf("%d",nA);
    }
    printf("%d",nA);
    return 0;
}

如果这样定义变量,则nA不会重定义,且{ }中的int nA = 2;在代码执行到}后结束,不再存在。
文件作用域:在代码外面定义的变量,也就是全局变量,全局变量在当前文件的任何一个位置都可以访问。例如:

1
2
3
4
5
6
7
//代码外面声明
int g_nNum = 1;
int main()
{
    printf("%d",g_nNum);
    return 0;
}

github:https://github.com/0I00II000I00I0I0

bilibili:https://space.bilibili.com/284022506


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 230
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
林者 2021-5-11 17:01
2
0
6666
游客
登录 | 注册 方可回帖
返回