逍遥自在学C语言 | 变量、常量与数据类型

前言

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。
  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、基本数据类型

1、整型

C语言中的整型数据如下表所示:

数据类型 含义 长度(字节) 取值范围(有符号) 取值范围(无符号)
short 短整型 2 [ -2^{15} , 2^{15}-1 ] [ 0 , 2^{16}-1 ]
int 整型 4 [ -2^{31} , 2^{31}-1 ] [ 0 , 2^{32}-1 ]
long 长整型 4或8
long long 长长整型 8 [ -2^{63} , 2^{63}-1 ] [ 0 , 2^{64}-1 ]
  • 整型数据可以是有符号的,也可以是无符号的。

  • 有符号的整型可以表示负数和正数,而无符号的整型只能表示非负整数。

2、浮点型

浮点型用于表示实数,它分为单精度浮点型(float)和双精度浮点型(double)。单精度浮点型占用4个字节,双精度浮点型占用8个字节。它们的取值范围和精度如下表所示:

数据类型 长度(字节) 取值范围 精度
float 4 1.2E-38 ~ 3.4E38 约6位小数
double 8 2.2E-308 ~ 1.8E308(15位有效数字) 约15位小数

🚩 浮点型数据在计算机内部以二进制形式存储,因此可能会存在精度问题。在进行浮点型数据的比较时,应该使用适当的误差范围进行比较。

3、字符型

字符型用于表示单个字符,它占用1个字节。

数据类型 含义 长度(字节) 取值范围(有符号) 取值范围(无符号)
char 字符型 1 [ -2^7 , 2^7-1 ] [ 0 , 2^8-1 ]

字符型数据可以作为单个字符使用,也可以作为整型数据使用,表示该字符在ASCII码表中的对应数值。

4、布尔型

布尔型(bool)用于表示真假值,它只有两个取值:true和false。

在C语言中,布尔型数据被定义为一个整型数据类型,0表示false,非0表示true。

三、变量


1、变量的定义和声明

在C语言中,变量必须先被定义或声明才能使用。定义一个变量意味着为它分配内存,声明一个变量意味着告诉编译器这个变量的类型和名称。

  • 变量的定义格式如下:
type variable_name;

其中,type是变量的数据类型,variable_name是变量的名称。例如:

int apple;
short i = 5;
float voltage;
  • 变量的声明有两种情况:

1️⃣一种是需要建立存储空间的。例如:int apple 在声明的时候就已经建立了存储空间。
2️⃣另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int apple, 其中变量 apple 可以在别的文件中定义。

extern int apple; //声明,不是定义
int students; //声明,也是定义

📔 一般来讲,除非有extern关键字,否则都是变量的定义

2、变量类型

在C语言中,变量的类型指的是变量所存储的数据类型。我们前面介绍的基本数据类型,都可以作为变量的类型。

  • int:整型,用于存储整数。
  • long: 长整型,用于存储更大的整数。
  • float:单精度浮点型,用于存储浮点数。
  • double:双精度浮点型,用于存储更大的浮点数。
  • char:字符型,用于存储字符。
  • bool:布尔型,用于存储布尔值。

C语言还提供了一些复合数据类型,如结构体、联合体和枚举等,这些符合数据类型,我们在以后的文章中再介绍。

3、变量命名规则

  • 变量名可以由字母、数字和下划线组成,但必须以字母或下划线开头。

  • 变量名不能使用关键字作为名称,变量名的长度没有限制,但建议使用有意义的名称。

✔️ 正确的变量命名

int _gCount = 1;
int m_Age = 18;
long time2 = 20;

❌ 错误的变量命名

int 1round = 0; //不能以数字开头

int case = 1; //不能以关键字作为变量名

int %age = 16; //不能用标点符号

int name age = 18; //不能用空格

4、变量的初始化和赋值

  • 在C语言中,可以使用赋值运算符(=)将一个值赋给一个变量。

例如,下面的代码将值20赋给变量num:

int num;
num = 20;
  • 变量的初始化是指在声明变量时将其赋初值。

例如,下面的代码声明并初始化了一个名为num的整数变量:

int num = 10;

5、变量作用域

在C语言中,变量的作用域指的是变量在程序中可见的范围。变量可以在函数内部或外部定义。

  • 在函数内部定义的变量称为局部变量,只在该函数中可见。
  #include <stdio.h>
  
  void print_local_num() {
      int local_num = 20;   // 局部变量
      printf("local_num = %d\n", local_num);
  }
  
  int main()
  {
      print_local_num();  // 输出 local_num = 20
    return 0;    
  }
  • 在函数外部定义的变量称为全局变量,可以在整个程序中使用。
#include <stdio.h>

int global_num = 10; // 全局变量

void print_global_num() {
    printf("global_num = %d\n", global_num);
}

int main() {
    print_global_num();  // 输出 global_num = 10
    return 0;
}

6、变量存储类型

在C语言中,变量的存储类型指的是变量所存储的位置。C语言中的存储类型包括自动、静态、寄存器和外部等。

  • 自动变量:自动变量在函数内部声明,在函数执行时被创建,在函数结束时被销毁。
  • 静态变量:静态变量在函数内部或函数外部声明,它们在程序开始执行时被创建,在程序结束时被销毁。
  • 寄存器变量:寄存器变量是指被存储在CPU寄存器中的变量,它们通常用于在计算密集型的代码中提高性能。
  • 外部变量:外部变量是在程序文件外部声明的全局变量,可以被程序的所有文件访问。

🌴自动变量的默认存储类别为auto。例如,下面的代码定义了一个自动变量num:

#include <stdio.h>

void print_num() {
    auto int num = 30;
    printf("num = %d\n", num);
}

int main() {
    print_num();  // 输出 num = 30
    return 0;
}

🌴静态变量默认存储类别为static,在程序执行期间始终存在,它的值在函数调用之间保持不变。例如,下面的代码定义了一个静态变量static_num:

#include <stdio.h>

void print_static_num() {
    static int static_num = 40;
    printf("static_num = %d\n", static_num);
    static_num++;
}

int main() {
    print_static_num();  // 输出 static_num = 40
    print_static_num();  // 输出 static_num = 41
    print_static_num();  // 输出 static_num = 42
    return 0;
}

🌴寄存器变量的默认存储类别为register。例如,下面的代码定义了一个寄存器变量reg_num:

#include <stdio.h>

void print_reg_num() {
    register int reg_num = 50;
    printf("reg_num = %d\n", reg_num);
}

int main() {
    print_reg_num();  // 输出 reg_num = 50
    return 0;
}

🌴外部变量的默认存储类别为extern。例如,下面的代码定义了一个外部变量extern_num,并在另一个文件中访问它:

// other_file.c
int extern_num = 60;

// main.c
#include <stdio.h>

extern int extern_num;

void print_extern_num() {
    printf("extern_num = %d\n", extern_num);
}

int main() {
    print_extern_num();  // 输出 extern_num = 60
    return 0;
}

四、常量

在C语言中,常量可以是整数、浮点数、字符或字符串。

1、 整数常量

整数常量是指不带小数部分的数字。在C语言中,整数常量可以用十六进制、八进制或十进制表示。下表列出了不同进制下整数常量的表示方法:

进制 格式 示例
十进制 直接写数字 10, 20, 30
八进制 以0开头 012, 034, 076
十六进制 以0x或0X开头 0x10, 0x1E, 0xFF

例如,下面的代码定义了三个整数常量:

#include <stdio.h>

int main() {
    int decimal_num = 10;
    int octal_num = 012;
    int hex_num = 0xFF;
    printf("decimal_num = %d, octal_num = %d, hex_num = %d\n", decimal_num, octal_num, hex_num);
    return 0;
}

输出结果为:decimal_num = 10, octal_num = 10, hex_num = 255。

2、 浮点数常量

浮点数常量是指带有小数部分的数字。在C语言中,浮点数常量可以用小数点表示,也可以用科学计数法表示。例如,下面的代码定义了两个浮点数常量:

#include <stdio.h>

int main() {
    float float_num = 1.23;
    double double_num = 1.23e-5;
    printf("float_num = %f, double_num = %f\n", float_num, double_num);
    return 0;
}

输出结果为:float_num = 1.230000, double_num = 0.000012。

3、 字符常量

字符常量是指用单引号括起来的单个字符。例如,下面的代码定义了两个字符常量:

#include <stdio.h>

int main() {
    char char_a = 'A';
    char char_b = 'B';
    printf("char_a = %c, char_b = %c\n", char_a, char_b);
    return 0;
}

4、 字符串常量

字符串常量是指用双引号括起来的多个字符。在C语言中,字符串常量实际上是一个字符数组,以空字符('\0')结尾。例如,下面的代码定义了一个字符串常量:

#include <stdio.h>

int main() {
    char str[] = "Hello, world!";
    printf("%s\n", str);
    return 0;
}

输出结果为:Hello, world!。

小结

通过这篇文章,我们已经学会了C语言中基本的数据类型、变量和常量的使用。继续加油,你会成为C语言大佬的!

以上,如果觉得对你有帮助,点个赞再走吧,这样@知微之见也有更新下去的动力!

也欢迎私信我,一起交流!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容