linux环境下C编程(十)

变量有两个重要特征:生命周期和作用域
变量的作用域指可以使用变量名称的所有语句的总和
根据作用域把变量分成三组:全局变量 局部变量 块变量


声明在所有函数外面的变量叫做全局变量 全局变量的作用域是所有语句
自动初始化成0
声明在函数内部的变量叫做局部变量 局部变量的作用域只包含函数内部的所有语句
声明在语句块内部的变量叫做块变量 块变量的作用域只包含在语句块内部的语句


变量的生命周期描述了变量可以被使用的时间范围


变量在程序执行过程中随时被创建出来随时被销毁 
全局变量 局部变量 块变量的生命周期也不一样 全局变量的生命周期是整个程序运行
期间,局部变量是函数运行期间。形式参数的生命周期和局部变量一样。块变量的生命
周期是语句块运行期间


不同类型的变量可以重名 重名变量的使用遵循就近原则


声明变量时使用如下关键字
auto 声明自动变量 所有局部变量默认是自动变量
static 声明静态变量 静态变量的声明周期和作用域不匹配
静态全局变量的声明周期是整个程序运行期间,但是作用域被压缩到声明他的文件中所有
语句的总和。静态局部变量和静态块比拿来那个生命周期拉长到整个程序运行期间,
但作用域不变 。没有初始化的静态变量自动初始化成0,静态变量的初始化工作是在程序
开始运行的时候执行一次
const关键字来声明不可修改的变量(不可以对变量进行赋值)
这种变量只能在初始化的时候赋值
volatile声明异变变量
指针变量对应存储位置用来记录地址数据 指针变量一定要配合另一个普通便来那个使用
每种普通变量都有一种专门的指针变量对应。对指针的使用最终就是为了操作配对的
普通变量 大多数指针变量会和不同普通变量配对


指针可以看作普通变量的某种身份


练习:
1、 编写递归函数计算两个正整数的最大公约数
2、 编写一个生成彩票程序 采用全局组记录彩票中的所有数字




指针变量的操作通常分两步
把指针变量和正确的普通变量配对
通过指针变量操作普通变量


如果一条语句中声明多个指针变量需要在每个指针变量前加 *
NULL表示空地址,数值就是0.任何变量存储空间的地址都是不可能是空地址
所有没有配对的普通变量的指针变量都应该记录成空地址
既没有记录有效地址有没有记录成空地址的指针叫野指针,程序中不应该出现野指针
指针变量在程序运行过程中可能发生复杂变化
在我们的计算机中所有指针变量都是4个字节大小
通过指针变量找到的存储位置的大小由指针变量的类型决定


void* 指针不指定配合的存储空间类型 这种指针变量用来记录来历不明的地址数据
这种指针在使用前必须先进行类型转换


指针可以作为函数的形参使用 效果和数组一样 指针变量做形参时函数内部可以根据
这个指针找到很多存储位置 函数内部对这个存储位置的修改在函数结束后都会保留


尽量针对数据的身份变成而不是针对数据的存储位置编程


void*指针通常作为函数的形参使用


指针变量可以作为返回值使用


如果希望函数的返回值表示另外某个变量的存储位置 则需要把返回值声明成指针类型


绝不可以把局部变量的地址赋值给指针类型的返回值变量


地址数据只能参与如下计算
地址+常数  地址-常数  地址-地址
前两种计算常数是有单位的表示多个变量的大小 变量的类型取决于指针的类型
最后一种计算结果也是有单位的表示多个变量的大小,变量的类型由指针类型决定


一旦用数组名称给指针赋值后他们就可以互相混用了 ,一下是他们的区别
数组名称不可以被赋值 指针变量可以
对数组名称进行sizeof计算得到整个数组的大小 对指针变量得到指针变量的大小
他们取地址结果不同 数组名称取地址结果不变但是类型变成二维数组
对指针变量取地址结果和指针变量中记录的地址没有关系
二级指针变量可以记录普通指针变量的地址
可以使用指针变量做循环变量操作数组中的每个存储位置
声明指针变量也可以使用const关键字 
const int *p 指针本身可以修改但不可以通过指针修改配对的普通变量
int * const p 这种指针本身不可以修改但是可以修改通过它配对的普通变量
const指针通常用于函数的指针参数


练习
1、使用指针变量对一个数组中的所有数据颠倒位置
2、使用指针变量检查数组中是否包含另外一个数组













































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值