常量

在程序中不可变化的量,也就不可赋值

常用两种定义方式,#defineconst

另外还有一个字符串常量

define

#define MAX 100

#define在预编译的时候,其实也是做的简单文本替换

可以通过gcc -E test test.c进行验证

注:使用define定义时候叫做宏定义,其原理类似于include,其后没有双引号

const

const定义一个变量,一旦定义以后就不可以修改。故const定义的变量在一开始就要赋值,不然在使用的时候就会发生意外,取到的是原内存地址的值,为不确定值。

const int a = 10;

字符串常量

在C语言当中""引用的字符串叫做字符串常量,一旦定义亦不可以被修改的

其形式为"test"

其实质是使用null字符’\0’终止的一维数组,在内存中实际占用的地址位会多一位,即为’\0’占用的地址

由于C语言中没有专门定义字符串常量的关键字,故一般是用char数组定义字符串。

char string[6] = {'t', 'e', 's', 't', '\0'};
//等价于
char string[] = "test";

注:以上实质为数组,可修改但实际并不是修改字符串的值

字符串有很多常用的函数,现简单的列出几个常用的字符串操作函数:

函数 功能
strcpy(s1, s2); 复制字符串 s2 到字符串 s1
strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾
strlen(s1); 返回字符串 s1 的长度
strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0
strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置
strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置

sizeof关键字与size_t

sizeof是一个关键字,而不是一个函数。

sizeof返回的是一个大于0的整数,表示数据类型在计算机内存中占用的空间,单位是字节

为了表示sizeof的返回值,使用size_t表示sizeof的返回值。即为无符号整形。一般情况下等价于就是unsigned int

sizeof(int);
sizeof(char);

int类型

int变量

int是整型

int类型占据内存的大小为4个字节

16位系统下:2个字节

32和64位系统下:4个字节

int a; //代表在内存中开辟一个大小为4字节的存储空间
a = 1; //代表在开辟的空间里存储的数据是10这个常量

补充知识:

小端对齐和大端对齐

小端对齐:高地址放高位,底地址放低位

大端对齐:高地址放低位,底地址放高位

对于大型Unix CPU都是按照大端对齐方式处理int,但对于x86构架CPU,还有ARM,是小端对齐的

printf输出int的值

int a = 10;
printf("%d",a); //%d的意思是按照10进制打印一个整数

%d:按照10进制打印一个整数

%o:按照8进制打印一个整数

%x与%X:按照16进制打印一个整数(区分大小写打印)

short, long, long long, unsigned int

  • 在32位操作系统下:

    short:2个字节

    long:4个字节

    long long:8个字节
  • 在64位操作系统下

    int:4个字节

    long 在大多数64位系统下8个字节
  • 无符号短整数:unsigned short
  • 无符号整数:unsigned int
  • 无符号的长整数:unsigned long
  • long结尾一般添加l或者L以示区分(和int区分)e.g.:

    9l,9L,9ll,9LL,9u,9ull,9ULL

整数溢出

当把一个大的整数赋值给小的整数,叫整数溢出

此时会导致高位被抛弃,截断的数据赋值给小的整数

char类型

char变量

char是字符型

char占据一个字节的内存

char -128~+127(7F)

unsigned char 0~255(FF)

char就是一个字节(BYTE)

如果将char当作一个整数输出的话,就是该字符的ASCII码

printf输出char

%c 代表输出一个字符

常见转义字符

转义字符 意义
\a 警报
\b 退格
\n 换行
\r 回车
\t 制表符
\ 斜杠
\’ 单引号
\” 双引号
? 问号

浮点数

浮点数变量

浮点数所占字节和计算机密切相关

float:单精度浮点数

double:双精度浮点数

long double

float表示的数,一般结尾加f或者F,以示区分(和double区分)

printf输出浮点数

%f或者%Lf

基本类型小结

浮点数赋值给整数,小数位会舍弃。

整数赋值给浮点数,会增加小数位,全部用0填充

类型 描述
char 通常是一个字节(八位)。这是一个整数类型。
int 对机器而言,整数的最自然的大小。
float 单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。
double 双精度浮点值。双精度是1位符号,11位指数,52位小数。
void 表示类型的缺失。

类型限定

  • const

    const限定一个变量的值不可以改变
const int ci = 10;
  • volatile

    告诉编译器不要优化代码,只要是volatile类型变量,每一步都需要从内存当中读取

    一般在传感器的使用中比较常见
volatile int vi = 10;
  • register

    告诉编译器这个变量使用寄存器,提高效率,register只是一个建议,而不是必须的结果
register int ri = 10;

类型转换

  • 隐式转换
double d = 10.5;
int a = d;
  • 显示转换(强制转换)
int a = 5;
int b = 2;
double d = (double)a / (double)b;

C学习笔记-数据类型的更多相关文章

  1. MySQL学习笔记--数据类型

    一.数据类型(内容参考<SQL学习指南>)不完整 1.文本类型 文本类型 最大字节数 tinytext 255 text 65535 varchar 65536 mediumtext 16 ...

  2. python学习笔记--数据类型

    Life is short, You need Python! 霸气的口号! 今天我也开始学python了,毕竟不懂后端的前端不是好前端.之前有过‘世界上最好的语言’和JavaScript的学习经验. ...

  3. JS学习笔记-数据类型

    最初的JS学习已经过去大半年的时间了,至此感觉对JS的使用与理解并非非常深入,因此在近期的工作之余也開始了新一轮的JS学习. 几天时间过去了,对于一些基础内容的学习还是非常有必要的,就从今天的又一次整 ...

  4. db2学习笔记--数据类型对表的影响

    创建表的时为列选择合适的数据类型,可以提高数据库性能. 1.选择合适的数据类型,避免出现数据类型转换.例如日期,有人使用字符串来存放日期.时间戳,最后我们还要在程序中使用to_date做数据类型转换, ...

  5. JavaScript学习笔记——数据类型强制转换和隐式转换

    javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...

  6. java学习笔记----数据类型,变量,常量

    一.数据类型 1.基本类型(8种,又称内置数据类型).6种数字类型(byte,short,int,long,float,double),一种字符型(char),一种布尔类型(boolean). byt ...

  7. [python学习笔记] 数据类型与语法

    数据类型 数值型 int 整形 没有long类型,可以代表任意大小的整数. type(1) -> int float 浮点数 也没有double类型 type(1.2) -> float ...

  8. Python学习笔记 - 数据类型和变量

    Python中有整数和浮点数,表示方法和C语言一样 浮点数也很像,不过Python可以用单引号把字符串括起来 字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz ...

  9. python 学习笔记 ---- 数据类型

    Python有五个标准的数据类型: Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) ① List 列表 和 Tuple 元组     ...

  10. TypeScript学习笔记—数据类型

    TypeScript 数据类型 Boolean 类型 let isDone: boolean = false; // tsc => var isDone = false; Number 类型 l ...

随机推荐

  1. Python3-def

    def hello(): print("这是一个无参数的方法!") hello(); print("") def helloOne(str): print(st ...

  2. CCPC 2017 哈尔滨 L. Color a Tree && HDU 6241(二分+树形DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6241 题意:给你一棵有 n 个结点的树,每个结点初始颜色都为白色,有 A 个条件:结点 x_i 的黑色 ...

  3. Python模块之目录

     1.加密算法有关 hmac模块 hashlib模块 2.进程有关 multiprocessing模块 3.线程有关 threading模块 4.协程有关 asyncio模块 5.系统命令调用 sub ...

  4. Luogu P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理+容斥原理

    真是菜到爆炸....容斥写反(反正第一次写qwq) 题意:$n-1$个公司,每个公司可以连一些边,求每个边让不同公司连的生成树方案数. 矩阵树定理+容斥原理(注意到$n$不是很大) 枚举公司参与与否的 ...

  5. 【luoguP2158】 [SDOI2008]仪仗队

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...

  6. wnmp安装配置的坑

    1.下载安装nginx: nginx官网下载地址->下载nginx 下载任意版本.我下载的是1.13.12版本,解压到C:\wnmp\nginx(自己决定目录),运行nginx.exe. 访问h ...

  7. Python基础之基本数据类型的总结

    基本数据类型的总结 1. 按照存储空间的占用分(从低到高) 数字 字符串 集合:无序,即无序存索引相关信息 元组:有序,需要存索引相关信息,不可变 列表:有序,需要存索引相关信息,可变,需要处理数据的 ...

  8. 什么是挂载?mount的用处在哪?

    关于挂载的作用一直不是很清楚,今天在阅读教材时看见了mount这个命令,发现它的用处很隐晦但非常强大.奈何教材说的不明朗,因此在网上整合了一些优秀的解释,看完之后豁然开朗. 1.提一句Windows下 ...

  9. 【java设计模式】-02工厂模式

    工厂模式简述 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在工厂模式中,我们在创建对象时不会对客 ...

  10. PAT L2-001 紧急救援 —— (多参数最短路)

    和天梯中的直捣黄龙差不多.但是,通过这个问题,我对多参数最短路又有了更深一层的了解. 这题因为点数比较多,所以如果直接用大力学长的在G上dfs找最短路径的条数的话,会TLE,所以需要剪枝.剪枝方法是, ...