C语言中的类型转换——将字符串s转换为整数型(int)类型
在讲类型转换之前,我们先要理解下C语言中单引号和双引号的区别。
先讲双引号,双引号就是字符串,我们要证实我们的想法,我选择写一段代码看看开:
#include <stdio.h>
int main()
{
printf("hello,world1");
return ;
}
然后我们编译运行看看输出什么:
hello,world1
我们的字符串被运行了。我学过Python,前端,我的潜意识认为单引号('')的含义也是代表字符串。让我们试试
我们再写一段代码:
#include <stdio.h>
int main()
{
printf('');
return ;
}
然后我编译运行,看输出信息:
rgument is of type ‘int’
extern int printf (const char *__restrict __format, ...);
我们发现报错了。
从这里我们发现单引号和双引号是有区别的,我们再来写一段代码:
#include <stdio.h>
int main()
{
printf("%d",'');
return ;
}
然后我编译运行,看输出信息:
49
输出的并不是1,而是49。
我对这里很眼熟,有可能刚学习编程的人不知道这是什么。这个49就是ASCII码
| 00110001 | 49 | 31 | 1 |
这条信息的来源源自于:http://www.asciima.com/
自己去查就知道了。
通过我们的实践告诉我们,双引号是字符串,单引号是字符,输出的是ASCII码。并不是表面看到的那样。
现在我们理解了这个。
下面我们来看这么一句话,我相信学习过C语言的人肯定接触过[c-'0']
它到底是什么意思?怎么这么困扰?今天我们来揭开它的真实面纱。
我们还是来实践,用代码说话:
#include <stdio.h>
int main()
{
printf("%d",''-'');
return ;
}
这里都是单引号,我前面讲了,单引号输出对应的ASCII码,这里还是ASCII码吗?
我编译运行看下输出结果:
3
是不是有点惊讶。竟然是3。打开ASCII表,我们看到3的位置是51,0的位置是48。51-48=3,很合理。
下面我们开始讲解我们的类型转换,我直接上代码,不废话。
#include <stdio.h>
int atoi(char s[]) //定义atoi函数,函数()里面的是char类型的数组
{
int i,n=;
for(i=;s[i]>='' && s[i]<='';i++)
n=*n+(s[i]-'');
return n;
}
/*
限定s[i]中的值只能是字符串数字不能是字符串
*/ /*
第一次循环的时候:i为0,s[0]='1',n=0; n=10*0+('1'-'0')=1
第二从循环的时候:i为1,s[1]='2',n=1; n=1*10+('2'-'0')=12
第三次循环的时候:i为3,s[2]='3',n=12;n=12*10+('3'-'0')=123
循环三次,输出最终结果123
*/
int main()
{
printf("%d\n",atoi("")); //atoi函数调用
return ;
然后我们编译运行看看输出结果:
123
OK,就这样!
C语言中的类型转换——将字符串s转换为整数型(int)类型的更多相关文章
- C语言中强制类型转换总结
C语言中强制类型转换总结 ● 字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128-127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围 ...
- C语言中存储多个字符串的两种方式
C语言中存储多个字符串的两种方式 方式一 二维字符串数组 声明: char name[][] = { "Justinian", "Momo", " ...
- C语言中的数组与字符串
1. 数组与指针: 对于数组,需要注意两点:1, C语言中只有一维数组, 而且数组的大小必须在编译期就作为一个常数确定下来: 2. 对于一个数组,我们只能做两件事:确定数组的大小 和 获得指向该数组下 ...
- Go语言中其他数据与字符串类型的转换
1 概述 Go语言是强类型语言,因此总会需要将字符串转成需要的类型.比如整型和字符串转换,字符串和布尔型的转换等.本文就介绍如何完成这些转换,以下是Go语言关于字符串转换的整理说明,主要是与切片类型的 ...
- C语言中数据类型转换的学习
1. 整型和枚举类型数据的转换 测试代码如下: #include <stdio.h> typedef enum _E_TYPE_T { E_TYPE_1 = -1, E_T ...
- 【原创】go语言学习(三)字符串串、时间和日期类型
目录 1.字符串串原理理解析2. 时间类型3. 日期类型 字符串串原理理解析 1.字符串串底层就是⼀一个byte数组,所以可以和[]byte类型互相转换2.字符串串之中的字符是不不能修改的,那怎么修改 ...
- C语言中的字符和字符串
C语言在中常常出现字符和字符串,而一串字符或者字符串其实就是数组 字符数组的定义 char arr[]={'h','e','l','l','o','\0'}; 而定义字符串: char arr1[]= ...
- C语言中字符数组和字符串指针分析
这几天搞Unix上的C程序,里面用到了很多字符数组和字符串指针,我记得在学完C语言后相当一段时间里,对指针这个东西还是模模糊糊,后来工作也没怎么 用到过C,虽然网上这类的文章也有很多,还是决定自己在这 ...
- 关于C语言中变量类型转换
今天在工作中遇到一个问题,而在解决问题的过程中,发现一段关于int 型变量(a)和char型(b)变量间类型转换的代码存在问题:一个值为255的int型变量a,强制类型转换并赋值给char型变量b后, ...
随机推荐
- linux 安装ssh以及ssh用法与免密登录
想要免费登录就是把本地机器的id_rsa_pub的内容放到远程服务器的authorized_keys里面 一.配置yum和hosts文件 配置hosts文件: 命令:vi /etc/hosts 在文件 ...
- Oracle 内存参数调优设置
Oracle 数据库系统中起到调节作用的参数叫初始化参数,数据库管理员根据实际情况需要适当调整这些 初始化参数以优化Oracle系统. 1 主要系统参数调优介绍 2 系统内存参数的分配 2.1 Ora ...
- [转帖]Centos7 yum安装Chrome浏览器
Centos7 yum安装Chrome浏览器 https://www.cnblogs.com/ianduin/p/8727333.html以及https://blog.csdn.net/libaine ...
- [转帖]SQL Server 索引中include的魅力(具有包含性列的索引)
SQL Server 索引中include的魅力(具有包含性列的索引) http://www.cnblogs.com/gaizai/archive/2010/01/11/1644358.html 上个 ...
- Git SSH公钥配置
https://www.cnblogs.com/smuxiaolei/p/7484678.html https://blog.csdn.net/weixin_42063071/article/deta ...
- mysql逻辑架构
逻辑架构图 MySQL有点与众不同,它的逻辑架构可以在多种不同的场景中应用并发挥良好的作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离.这种架构 ...
- centos安装Tesseract
yum安装(推荐) yum search tesseract yum install tesseract.x86_64 -y pip3 install pytesseract pip3 install ...
- npm安裝、卸載、刪除、撤銷發佈包、更新版本信息
利用npm安裝包: 全局安裝:npm install -g 模塊安裝 局部安裝(可以使用repuire(‘模塊名’)引用):npm install 模塊名稱 如果權限不夠,就是用管理員方式安裝. 本地 ...
- html5 表單屬性
新的 form 属性: autocomplete novalidate 新的 input 属性: autocomplete autofocus form form overrides (formact ...
- 九、.net core用orm继承DbContext(数据库上下文)方式操作数据库
一.创建一个DataContext普通类继承DbContext 安装程序集:Pomelo.EntityFrameworkCore.MySql 二.配置连接字符串(MySql/SqlServer都 ...