第二章:C语言学习之变量

C语言学习之路

第一章 初始C语言

第二章 变量



前言

在初始C语言的文章中,我们编写了第一个程序。但是我们知道,编程的其中一个目的就是对数据的处理。在生活中,一个人的身高、体重、年龄和性别等,都是不同类型的数据。在这些数据中,有一些是变量,例如年龄、身高等,还有一些是常量,例如性别。

而这些数据,在C语言中,又是如何体现的呢?本章将会进行详细的讲解。


一、变量

1、代码展示:

//作者本人的数据特征表示如下:
short Age = 18;
int Born_Year=2004;
long Born_Day=20040206;
long long Call_number=12345678910;
float Weight=56.5;
double Height=175.00;
char Name='Y';

2、代码详解:

(1)数据类型:

在前言中,我们发现,一个人的各项指标都是描述这个人特征的数据。但是这些数据除了在数值上不同外,在数据的类型上也不尽相同。例如:一个人的姓名属于字符型,一个人的身高可以精确到小数部分,一个人的年龄为整数等等。

那么,在C语言中又有哪些分类呢?

  • 整型:
    整型就是我们常说的整数,即不含小数部分。
    短整型short
    整型:int
    长整型:long
    长长整型:long long
  • 浮点型:
    浮点型就是我们常说的小数
    单精度浮点型:float
    双精度浮点型:double
  • 字符型:
    字符型就是我们在学习英语时的英文字母。
    字符型:char

以上就是在C语言中常用的数据类型,其后面的英文单词即告诉编译器你要创建一个什么类型的变量,这些单词又称为关键字。至于如何创建变量我们稍后会加以详细的讲解。那么我想,读者在看到这些分类时,除了不知如何使用外,另一大困惑在于,同一种数据类型为何又多种形式,这些形式又有什么不同?这样分类的意义又是什么呢?在解决这个问题之前,我们先不妨了解一下数据所占的内存情况。

(2)内存的占用:

在讲解不同的数据类型所占内存之前,我们首先应该对计算机的内存单位有个大致的了解。

a、常用单位:
名称单位
比特bit
字节byte(B)
千字节KB
兆字节MB
吉字节GB
太字节TB

在《初识C语言》一章中,我们了解到,机器语言是由0和1组成的。此处提到的1比特就是存储0和1中的一个数字所需的内存空间。有了这样的认识,我们就可以了解一下单位间的换算关系。
1 B = 8 bit
1 KB =1024 B
1 MB =1024 KB
1 GB = 1024 MB
1 TB = 1024 GB

b、内存与数据范围的关系:

那么内存的大小又有什么作用呢?
为了回答这一问题,我们便需要理解一下,二进制与十进制语言。
我们最常用的就是十进制,即小学加法中,满10进1。同理,二进制语言就是满2进1 。
在这里插入图片描述
上图为3个比特(bit)内存大小所能存储的数据范围。图中最多加7次,最多存储8个不同的数字,即23个。
在这里插入图片描述
同理,由上图可知,存储的范围是4个数字。即22
综上所述:存储数字的范围由内存的大小决定,内存所占越大,存储数字的范围越大。同时,我们能够归纳出一个数学公式:
存储的数字的范围记作N。所占内存为X比特(bit)。
那么:N=2X(个)

c、数据类型所占内存:
数据类型内存(字节)范围
short2 字节-215~215-1
int4字节-231~231-1
long4或8字节-231~231-1 或-263~263-1
long long8字节-263~263-1
float4字节有效数字8位
double8字节有效数字16位
char1字节

基于刚才对于内存单位的了解和数据范围的计算,我们可以轻松印证不同整形数据的范围中的数字个数。

基于以上的认知,我们就能够解释为什么要设置不同大小的整形数据,由于其内存不同,造成了其能够存储的数据范围不同。那么这样的好处在于,当我们存储一个较小的数字时,可以使用短整型,当我们输出一个较大的数字时,可以使用一个长整型。这样就能够避免内存空间的浪费。

(3)语法规范:

数据类型 + 变量名称  =  初始值  ;//推荐
数据类型 + 变量名称 ;// 不推荐
//给字符型变量赋值时,需要给值加上,英文输入法下的单引号:''。

我们可以通过生活中的例子来理解这个语法。在买房的过程中,我们会先选择一个合适的户型,然后为了精确地找到自己的家,我们会在门口挂上门牌号,接着我们会在房间内放置一些家具。

由此类比,在创建一个变量时,我们先根据变量的类型,写明数据类型,然后我们在根据需要给变量起名。接着,在赋予初始值。

一般情况下,我们最好赋予一个初始值,避免出现bug。同时,在起名字的时候,我们需要注意的是,该名称能够表明该变量的含义,例如年龄,身高,从而增强代码的可读性。

二、 变量的输出:

当我们成功构建一个变量后,我们又如何将这个变量打印出来呢?

1、代码展示:

#include<stdio.h>
int main()
{
  //创建一个变量
  int a=0;
  float b=0;
  double c=0;
  char d='a';
  //打印变量:
  printf("a= %d \n",a);
  printf("b=%f \n",b);
  printf("c=%lf \n",c);
  printf("d=%c\n",d);
  return 0;
}

2、代码解读:

首先,我们想要打印某个变量,就需要用到,我们之前学到的库函数中的printf()函数。
那么在括号内部我们会发现一个统一的结构,%字母。这个部分相当于一个占位符,即告诉编译器,我们要在这个位置打印某个类型的数据。这时候,需要注意的是,不同的数据类型,%后面的字母是不相同的:

%d ——整型
%f——单精度浮点型
%lf——双精度浮点型
%c——字符型

然后,我们会发现后面有一个\n 这一部分的意思是换行。
接着,我们会发现,在双引号的后面,接了一个英文输入法下的逗号,再写了一个我们想要输出的变量值,这个值最终打印的位置,就是刚刚提到的%字母的位置。

三、变量的输入

刚才我们展示了如何向外展示一个变量,那么接下来我们将要学习的是,如何向内输入一个变量值。

1、代码展示:

int main()
{
  int a = 0;
  int b= 0;
  scanf("%d %d",&a,&b);
  return 0;
}

2、代码解读:

类比变量的输出,在代码的输入中,我们同样需要调用库函数中的函数,此时我们调用的是,scanf()函数。同样,在双引号内,根据我们需要输入的数据类型,依次写下%字母。起到一个占位的作用,然后,我们在依次输入对应的变量名(一定要按顺序)。
但是这里需要注意的是,我们必须在变量名前加上一个取址符号&。倘若没有学过C++那么这里直接记住即可。
在C++中,这种传入变量的方式称为引用传递,即传进变量的地址,这样在赋值的过程中,变量的值才会发生变化,即采用了深拷贝的方式。

四、变量的分类

1、全局变量:

大括号外部定义的是全局变量。
全局变量的适用范围非常广,在同一个文件内,可以随时调用全局变量。
倘若不在一个文件内,但是在同一个工程内,则需要利用关键字extern 数据类型 数据名称声明一下全局变量的存在,才能调用。

int a = 0;
//在自定义的函数内调用
void test01()
{
  a=20;//正确
}
//在主函数内调用
int main()
{
  a=10;//正确
  return 0;
}

2、局部变量:

大括号内部定义的是局部变量。
局部变量的适用范围是由一定的局限性的,局部变量只能在其所在的中括号内调用。倘若在中括号的外部调用,则会出现编译器无法识别的问题。

int main()
{ 
  {
    int a=0;
    a=10;//正确
  }
  a=20//错误,因为在大括号外面调用,编译器并不认识
  return 0;
}

3、局部变量优先原则:

当局部变量和全局变量同名时,局部变量优先被调用。
但是我们并不建议让二者的变量名称相同,容易出现bug。

int a=100;
int main()
{
  {
     int a= 10;
     printf("%d",a);//最终的输出结果是10,因为局部变量优先调用
  }

return 0;
}

五、变量的作用域和生命周期

1、变量的作用域:

局部变量的作用域是该局部变量所在的大括号内。
全局变量的作用域是整个工程,同一文件内直接调用即可,同一工程,不同文件内,需要利用关键字extern 数据类型 数据名称声明后,再调用。(此处类似于后面学习的函数声明)

2、变量的生命周期:

一个生物的生命周期就是从生物的出生到死亡。而变量的生命周期则是从变量的创建到变量的销毁。
当执行到局部变量的创建代码时,局部变量的生命周期开始,当该局部变量所在的大括号内的所有代码都执行完毕,那么该局部变量会被销毁,即局部变量的生命周期结束。
当执行到全局变量的创建代码时,全局变量的声明周期开始,当整个程序结束时,全局变量才会被销毁,此时全局变量的生命周期结束。

六、总结

本章内容我们学习了变量的创建、输出和输入。以及全局变量和局部变量的知识点。一开始学习时,会不容易理解这部分内容,但是,随着学习的深入,便会逐渐理解。
皈依不在天堂,皈依就在路上。
——史铁生

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值