标准库,atof()函数包含在头文件<stdlib.h>中

/******把字符串s转换为相应的双精度浮点数*******/

 #include <stdio.h>
#include <ctype.h>
double atof(char s[]); main(){
printf("%f\n", atof("109.999")); //109.999000
printf("%f\n", atof("0.2350000")); //0.235000
printf("%f\n", atof(" 1.2350 5")); //1.235000
printf("%f\n", atof("-1.235")); //-1.235000
}
/******把字符串s转换为相应的双精度浮点数*******/
double atof(char s[]){
double val, power;
int i, sign;
for(i=0; isspace(s[i]); i++){
;
}
sign = s[i] == '-' ? -1 : 1;
if('+' == s[i] || '-' == s[i]){
i++;
}
for(val=0.0; isdigit(s[i]); i++){
val = 10.0 * val + (s[i] - '0');
}
if('.' == s[i]){
i++;
} //把小数部分跟整数一样处理,记录位数,再除位数得值
for(power=1.0; isdigit(s[i]); i++){
val = 10.0 * val + (s[i] - '0');
power *= 10.0;
} return sign * val / power;
}

C语言不允许在一个函数定义其他函数。不像JS,可以这样。      

<script>
function test(){
var i = 1, j = 2;
function test2(){
i += 2;
return i + j;
}
return test2();
}
console.log(test()); //5
</script>

外部变量(全局变量):永久存在。
默认情况下,外部变量与函数具有下列性质:通过同一个名字对外部变量的所有引用(即使这种引用来自于单独编译的不同函数)实际上都是引用同一个对象(标准中这一性质称为外部链接)
内部变量(局部变量):函数内有效。

逆波兰表示法:
(1 - 2) * (4 + 5)    可表示为:1 2 – 4 5 + *

静态变量:
外部的static声明通常多用于变量,也可用于声明函数。
通常情况下,函数是可全局访问的,但声明为static类型函数,仅对该函数所在的文件可见,其他文件无法访问。
static也可声明局部变量,与普通局部变量不同的是,它的值一直存在。

#include <stdio.h>

static int i = 0;
main(){
int j;
for(j=0; j<10; j++){
i++;
}
printf("%d\n",i); //10
}

寄存器变量
register变量放在机器的寄存器中,这样可以使程序更小、执行速度更快。但编译器可以忽略此选项。
    register int x;
    register char c;
register声明只适用于自动变量以及函数的形式参数。
f(register unsigned m, register long n){
    register int i;
….
}
实际使用时,底层硬件环境对寄存器变量的使用会有一些限制。每个函数中只有很少的变量可以保存在寄存器中,且只允许某些类型的变量。但是,过量的寄存器声明并没有什么害处,因为编译器可以忽略过量的或不支持的寄存器变量声明。另外,无论寄存器变量实际上是不是存放在寄存器中,它的地址都是不能访问的。在不同的机器中,对寄存器变量的数量和类型的具体限制也不同。

初始化:在不进行显式初始化的情况下,外部变量和静态变量都被初始化为0,而自动变量和寄存器变量的初值没有定义(即初值为无用的信息)。

#include <stdio.h>

int i;
static long l;
main(){
int j;
register int k;
printf("%d\n",i); //0
printf("%d\n",l); //0
printf("%d\n",j); //2130567168无效值
printf("%d\n",k); //4199260无效值
}

全局变量与静态变量,初始化表达式必须是常量表达式,且只初始化一次。
局部变量与寄存器变量,初始化可以包含在此表达式之前已定义的值,包括函数调用。

定义数组
    int months[] = {1,2,3,4,5,6,7,8,9,10,11,12};        //12
    当不指定数组长度时,编译器把花括号初始化表达式的个数作为数组长度。
如果初始化表达式的个数比数组元素少,则对全局变量、静态变量和局部变量来说,没有初始化表达式的元素的值为0。反之,则是错误的。不能一次将一个初始化表达式指定给多个数组元素。

#include <stdio.h>

main(){
int months[15] = {1,2,3,4,5,6,7,8,9,10,11,12};
//int arr[3] = {1,2,3,4}; //error
printf("%d\n", months[12]); //0
months[12] = 13;
printf("%d\n", months[12]); //13
months[14] = 15;
months[13] = 14;
printf("%d\n", months[14]); //15
}

字符数组初始化
    char s[] = “abcd”;
    char s[] = {‘a’, ‘b’, ‘c’, ‘d’};

 char s[] = {"abcd"};

附:

1、有一个人在一个森林里迷路了,他想看一下时间,可是又发现自己没带表。恰好他看到前面有两个小女孩在玩耍,于是他决定过去打听一下。更不幸的是这两个小女孩有一个毛病,姐姐上午说真话,下午就说假话,而妹妹与姐姐恰好相反。但他还是走近去他问她们:“你们谁是姐姐?”胖的说:“我是。”瘦的也说:“我是。”他又问:现在是什么时候?胖的说:“上午。”“不对”,瘦的说:“应该是下午。”这下他迷糊了,到底他们说的话是真是假?

2、有一个外地人路过一个小镇,此时天色已晚,于是他便去投宿。当他来到一个十字路口时,他知道肯定有一条路是通向宾馆的,可是路口却没有任何标记,只有三个小木牌。第一个木牌上写着:这条路上有宾馆。第二个木牌上写着:这条路上没有宾馆。第三个木牌上写着:那两个木牌有一个写的是事实,另一个是假的。相信我,我的话不会有错。假设你是这个投宿的人,按照第三个木牌的话为依据,你觉得你会找到宾馆吗?如果可以,那条路上有宾馆哪条路上有宾馆?

原文博客地址:http://www.cnblogs.com/lltong/

重拾C,一天一点点_7的更多相关文章

  1. 重拾C,一天一点点_2

    类型转换一般来说,如果二元运算符的两个操作数具有不同的类型,较低的类型提升为较高类型,结果为较高类型.表达式由float类型的操作数不会自动转换为double类型.使用float类型主要是为了在使用较 ...

  2. 重拾C,一天一点点

    数据类型及长度 char        字符型,占用一个字节 int          整型,通常代表特定机器中整数的自然长度 short       16位 int         16位或32位 ...

  3. 重拾C

    重拾C,一天一点点_10 来博客园今天刚好两年了,两年前开始学编程. 忙碌近两个月,项目昨天上线了,真心不容易,也不敢懈怠,接下来的问题会更多.这两天调试服务器,遇到不少麻烦. 刚出去溜达了一下,晚上 ...

  4. CSS魔法堂:重拾Border之——更广阔的遐想

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  5. CSS魔法堂:重拾Border之——不仅仅是圆角

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  6. CSS魔法堂:重拾Border之——图片作边框

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  7. CSS魔法堂:重拾Border之——解构Border

    前言  当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...

  8. 重拾Blog

    上个月是我入职现在的公司三周年的月份,所以又续订了五年的合同,最近有一些思考,也不知道这个五年能否还会一直在这个公司工作. 一切随缘吧. 闲适有毒,忙碌的时光总是过的很快,自从加入这个公司以来,日常的 ...

  9. [linux]重拾linux

    起因 因为想重拾起linux,同时需要用docker起几个镜像,用来学习网络知识.本来想直接去阿里云上买,后来一想自己机器上,起一个linux是个不错的选择,毕竟不花钱! 还可以用来做本地测试,学习使 ...

随机推荐

  1. 子查询语句的thinkphp实现

    语句 SELECT a.id as item_id,a.name as item_name,a.intro as item_intro,b.id,b.money FROM sh_incentive_i ...

  2. Linux学习笔记 -- 磁盘的管理

    df df命令参数功能:检查文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法: df [-ahikHTm] [目录或文件名] 选项与参数: -a ...

  3. DRF - 序列化组件(GET/PUT/DELETE接口设计)、视图优化组件

    一.序列化组件 基于上篇随笔的表结构 , 通过序列化组件的ModelSerializer设计如下三个接口 : GET 127.0.0.1:8000/books/{id} # 获取一条数据,返回值:{} ...

  4. npm中npm install 始终出错解决办法

    npm中npm install 始终出错解决办法 错误信息: C:\Windows\System32>npm install -g gulp npm ERR! Windows_NT 6.1.76 ...

  5. SonarQube在CentOS上的安装

    1 简介 SonarQube 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson/Jenkins 等 ...

  6. 非常详细的ok6410的linux系统移植…

    目录 Linux 3.3.5系统移植 2 LED驱动移植 8 按键驱动移植 9 LCD驱动移植 11 DM9000网卡驱动移植 14 搭建NFS网络文件系统 25 移植触摸屏驱动 38 移植Qt4.8 ...

  7. Properties & Method

    [Properties] 1.lazy property,通过@property来定义, lazy property的属性直到使用的时候才初始化: 2.Computed Properties: 2.对 ...

  8. js中 visibility和display的区别 js中 visibility和display的区别

    大多数人很容易将CSS属性display和visibility混淆,它们看似没有什么不同,其实它们的差别却是很大的. visibility属性用来确定元素是显示还是隐藏,这用visibility=&q ...

  9. 【原创】8. MYSQL++中的Row类型

    一.mysqlpp::Row类型 在之前的介绍中我们看到了如何通过mysqlpp::Query找到各种Result类型,然后又仔细分析了各种Result类型又是如何生成对应的Row类型(如下所示). ...

  10. Zookeeper Api(java)入门与应用

    如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...