C学习笔记-数据类型
常量
在程序中不可变化的量,也就不可赋值
常用两种定义方式,#define
和const
另外还有一个字符串常量
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学习笔记-数据类型的更多相关文章
- MySQL学习笔记--数据类型
一.数据类型(内容参考<SQL学习指南>)不完整 1.文本类型 文本类型 最大字节数 tinytext 255 text 65535 varchar 65536 mediumtext 16 ...
- python学习笔记--数据类型
Life is short, You need Python! 霸气的口号! 今天我也开始学python了,毕竟不懂后端的前端不是好前端.之前有过‘世界上最好的语言’和JavaScript的学习经验. ...
- JS学习笔记-数据类型
最初的JS学习已经过去大半年的时间了,至此感觉对JS的使用与理解并非非常深入,因此在近期的工作之余也開始了新一轮的JS学习. 几天时间过去了,对于一些基础内容的学习还是非常有必要的,就从今天的又一次整 ...
- db2学习笔记--数据类型对表的影响
创建表的时为列选择合适的数据类型,可以提高数据库性能. 1.选择合适的数据类型,避免出现数据类型转换.例如日期,有人使用字符串来存放日期.时间戳,最后我们还要在程序中使用to_date做数据类型转换, ...
- JavaScript学习笔记——数据类型强制转换和隐式转换
javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...
- java学习笔记----数据类型,变量,常量
一.数据类型 1.基本类型(8种,又称内置数据类型).6种数字类型(byte,short,int,long,float,double),一种字符型(char),一种布尔类型(boolean). byt ...
- [python学习笔记] 数据类型与语法
数据类型 数值型 int 整形 没有long类型,可以代表任意大小的整数. type(1) -> int float 浮点数 也没有double类型 type(1.2) -> float ...
- Python学习笔记 - 数据类型和变量
Python中有整数和浮点数,表示方法和C语言一样 浮点数也很像,不过Python可以用单引号把字符串括起来 字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz ...
- python 学习笔记 ---- 数据类型
Python有五个标准的数据类型: Numbers(数字) String(字符串) List(列表) Tuple(元组) Dictionary(字典) ① List 列表 和 Tuple 元组 ...
- TypeScript学习笔记—数据类型
TypeScript 数据类型 Boolean 类型 let isDone: boolean = false; // tsc => var isDone = false; Number 类型 l ...
随机推荐
- URAL 2052 Physical Education(数位DP)
题目链接:https://vjudge.net/contest/254142#problem/G 参考题解:https://blog.csdn.net/zearot/article/details/4 ...
- BZOJ 4522: [Cqoi2016]密钥破解 (Pollard-Rho板题)
Pollard-Rho 模板 板题-没啥说的- 求逆元出来后如果是负的记得加回正数 CODE #include<bits/stdc++.h> using namespace std; ty ...
- Spring Security 自定义 登陆 权限验证
转载于:https://www.jianshu.com/p/6b8fb59b614b 项目简介 基于Spring Cloud 的项目,Spring Cloud是在Spring Boot上搭建的所以按照 ...
- /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
报错信息: /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file ...
- Codeforces Round #346 (Div. 2) C题
C. Tanya and Toys In Berland recently a new collection of toys went on sale. This collection consist ...
- Delphi 实现Ping命令
Delphi 实现Ping命令 unit FtPing; interface uses Windows, SysUtils, Classes, Controls, Winsock, StdCtrls ...
- Linux版本内核及安装后的简单操作命令介绍
一.Linux的版本与内核 1.Linux发行版 Linux发行版= Linux内核+应用程序 Redhat,CentOS,Ubuntu,Suse,红旗,Mint,Fedora CentOS:社区版操 ...
- DbFunctions 作为 LINQ to Entities 查询的一部分使用时,此方法调用规范 CreateDateTime EDM 函数以创建新的 DateTime 对象。
DbFunctions.CreateDateTime CreateDateTime(year, month,day,hour,minute,second)
- $\LaTeX$数学公式大全
$\LaTeX$数学公式大全$1\ Geek\ and\ Hebrew\ letters$ $\LaTeX$数学公式大全$2\ Math\ Constructs$ $\LaTeX$数学公式大全$3\ ...
- tracert命令与tracert (IP地址)-d有什么区别?
他们的意义基本相同,都是路由追踪,返回从源到目标的路由情况:但tracert -d不解析各路由器的名称,只返回路由器的IP地址.而tracert 不仅返回各路由器的IP地址,而且返回其名称.简单来说, ...