piaomiaohongchen

          在讲类型转换之前,我们先要理解下C语言中单引号和双引号的区别。

          先讲双引号,双引号就是字符串,我们要证实我们的想法,我选择写一段代码看看开:

       

#include <stdio.h>
int main()
{
   printf("hello,world1");
   return 0;
}

 然后我们编译运行看看输出什么: 

hello,world1

 

  我们的字符串被运行了。我学过Python,前端,我的潜意识认为单引号(\'\')的含义也是代表字符串。让我们试试

  我们再写一段代码:

   

#include <stdio.h>
int main()
{
   printf(\'1\');
   return 0;
}

 然后我编译运行,看输出信息:

 

rgument is of type ‘intextern int printf (const char *__restrict __format, ...);

   我们发现报错了。

   从这里我们发现单引号和双引号是有区别的,我们再来写一段代码:

   

#include <stdio.h>
int main()
{
   printf("%d",\'1\');
   return 0;
}

 然后我编译运行,看输出信息:

  

49

输出的并不是1,而是49。

我对这里很眼熟,有可能刚学习编程的人不知道这是什么。这个49就是ASCII码

00110001 49 31 1

这条信息的来源源自于:http://www.asciima.com/

自己去查就知道了。

  通过我们的实践告诉我们,双引号是字符串,单引号是字符,输出的是ASCII码。并不是表面看到的那样。

  现在我们理解了这个。

   下面我们来看这么一句话,我相信学习过C语言的人肯定接触过[c-\'0\']

   它到底是什么意思?怎么这么困扰?今天我们来揭开它的真实面纱。

   我们还是来实践,用代码说话:

    

#include <stdio.h>
int main()
{
  printf("%d",\'3\'-\'0\');
  return 0;
}

这里都是单引号,我前面讲了,单引号输出对应的ASCII码,这里还是ASCII码吗?

我编译运行看下输出结果:

 

3

 是不是有点惊讶。竟然是3。打开ASCII表,我们看到3的位置是51,0的位置是48。51-48=3,很合理。

下面我们开始讲解我们的类型转换,我直接上代码,不废话。

#include <stdio.h>
  int atoi(char s[])   //定义atoi函数,函数()里面的是char类型的数组
  {
    int i,n=0;
    for(i=0;s[i]>=\'0\' && s[i]<=\'9\';i++)
        n=10*n+(s[i]-\'0\');
   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("123"));  //atoi函数调用
   return 0;

然后我们编译运行看看输出结果:

123

OK,就这样!

    

分类:

技术点:

相关文章:

  • 2021-12-05
  • 2021-10-04
  • 2021-04-16
  • 2021-04-21
  • 2021-12-04
  • 2021-09-13
  • 2021-12-06
猜你喜欢
  • 2021-11-06
  • 2021-12-19
  • 2021-10-07
  • 2021-10-19
  • 2021-09-27
  • 2021-09-13
相关资源
相似解决方案