C语言从零开始(3)

  1. 变量

定义:就意味着要在内存中开辟空间

c语言的内存分配图:

 

如何定义一个变量?

存储类型  数据类型  变量名;

存储类型:决定了开辟的空间再内存中的哪个分区

数据类型:表示要开辟的内存空间的大小

变量名:开辟的内存空间的名字

auto int a;

 

  1. 局部变量

定义在函数体(任何函数体)内部的变量

(2)全局变量

定义再函数体外部的变量

存储类型:auto、extern、static、register

auto:修饰的变量存储在栈区,只能修饰局部变量

extern:修饰的变量存储在静态区(.bss和.date统称为静态区),只能修饰全局变量

static:修饰的变量存储在静态区,局部变量和全局变量都可以修饰

register:修饰的变量存储在寄存器中,只能修饰局部变量

总结:

  1. 除了static和register修饰的局部变量,都存在栈区
  2. 全局变量存在静态区
  3. 静态变量存在静态区

初始化:在定义变量时对变量赋值

(1)int a = 10;//初始化

(2)int a;

a = 10;//赋值

案例1:

 

全局变量没有初始化其值默认为0

局部变量没有初始化其值为随机值

auto:修饰局部变量,存储在栈区

register :修饰局部变量,存储在寄存器中,建议将变量存储在寄存器中,可以提高程序的运行速度,最终是否在寄存器中,取决于编译器,如果没有寄存器,就存在栈区

 

extern:修饰全局变量,存储在静态区

声明外部文件的全局变量

目的是告诉编译器,这个全局变量已经在文件的外部定义过了

程序可以由多个.c文件组成

gcc extern2.c extern3.c; // a.out:一个程序

extern2.c 和extern3.c是组成程序的文件,假设在extern2.c中定义一个全局变量,在extern3.c也可以使用这个变量

注意:一个程序只能有且仅有一个main函数

static:修饰的变量存储在静态区,既可以修饰局部变量也可以修饰全局变量‘

  1. static修饰全局变量,只能在本文件内使用(或者:限制了全局变量的作用)

 

2.static修饰局部变量,延长了局部变量的生命周期,如果局部变量没有初始化,其值为0,如果初始化只会被赋值一次

 

 

2、生命周期和作用域

生命周期

从什么时候开辟空间到什么时候释放空间

作用域

使用的范围

局部变量:

生命周期:从定义开始,到模块(大括号)结束

作用域:大括号内

static修饰的局部变量:

生命周期:从定义开始,到程序结束

作用域:大括号内

全局变量:

生命周期:从定义开始,到程序结束

作用域:整个程序

static修饰的全局变量:

生命周期:从定义开始,到程序结束

作用域:本文件内

3、数据类型转换

1、强制类型转换(我们自己转的)

案例1、比如将int转成float

 

2、隐式类型转换(编译器自动转)

 

横向箭头:不管我们有没有进行混合运算,都势必进行转换

 

 

注意:float使用的时候是按照double来使用的

 同理,short、char是按照int来使用的

竖向箭头:只有在进行混合运算时,才进行转换

 

案例1:

 

案例2:

 

4、运算符

单算移关与,异或逻条赋

算术运算符、关系运算符、逻辑运算符、位运算符、sizeof、三目运算符、逗号运算符

1、算术运算符

+ 、-、 *、 /、 %、 ++、 --

注意:%不能用与浮点数

++在前:++a,先自加,再赋值

++在后:a++,先赋值,再自加

案例1:

 

案例2:

2、关系运算符

> 、< 、>=、 <=、==、 !=

案例:

 

注意:0 < a < 5 //error

等号的书写:

 

3、逻辑运算符

&& 、|| 、 !

表达式1  && 表达式2

&&截断法则:表达式1为假,结果就为假,表达式2不执行

表达式1 || 表达式2

||截断法则:表达式1为真,结果就为真,表达式2不执行

 

 

4、sizeof运算符

sizeof(数据类型)或sizeof(变量名)

 

注意:sizeof不是函数,sizeof是运算符或者关键字

5、三目运算符

表达式1?表达式2 :表达式3

判断表达式1是否成立,如果成立,将表达式2的值作为整个表达式的值,否则执行表达式3,并将结果作为整个表达式的值

 

6、逗号运算符

表达式1,表达式2,表达式3 ……….表达式n;

从左至右依次执行每个表达式,并将表达式n的值作为整个表达式的值

案例1:

 

案例2:

注意:逗号运算符的优先级是最低的,使用的时候加上括号

 

自定义宏,用三目运算符实现求两个数中比较小的数

#define  MIN(a,b)( (a) > (b) ? (b) : (a) )

可以练习一下一下代码:

        若有以下定义语句:int a=5; printf(“%d\n”,a++); 则输出结果是()

  1. 若定义x和y为double型变量,则表达式x=1, y=x+3/2的值是()

(3)int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是 () 

(4) 有整型变量x,单精度变量y=5.5,表达式x=(float)(y*3+((int)y)%4)执行后,x的值为()

(5)设int i=2,j=3,k=4,a=4,b=5,c=3;,则执行表达式(a=i<j)&&(b=j>k)&&(c=i,j,k)后,c值是

 (6) char ch 130;

printf(“%d\n”,ch);

   (7)unsigned char ch 260;

printf(“%d\n”,ch);

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值