前言

在学习编程语言的时候使用的最频繁的就是变量,变量可以为我们存放一些数据,也对我们编程起到很好的帮助,所以我们来说一下C语言中变量的内容。
C语言是一种强类型的语言,对每个变量的类型必须要规定好,而且规定了,所有的变量必须要先创建后才能使用,否则会报错。

一、数据类型

在说变量之前,先说明一下数据类型。
在C语言中有这么几种基本的数据类型:整形、浮点型、字符型
如果在这些类型前面添加一个 unsigned 就会将这些类型都变为无符号类型
如果在前面添加 signed 就变成有符号类型,但是这个修饰符是默认的,所以平时使用的时候不用添加也可以。

1.整形

类型名 关键字 所占字节数
整形 int 4个字节
长整形 long 8个字节
短整形 short 2个字节
无符号整形 unsigned int 4个字节
无符号长整形 unsigned long 8个字节
无符号短整形 unsigned short 2个字节

2.浮点型

类型名 关键字 所占字节数
单精度浮点型 float 4个字节
双精度浮点型 double 8个字节
无符号单精度浮点型 unsigned float 4个字节
无符号双精度浮点型 unsigned double 8个字节

3.字符型

类型名 关键字 所占字节数
字符型 char 1个字节
无符号字符型 unsigned char 1个字节

字符型也可以在里面存放字符型,但是范围比较小,很适合单片机的开发。

二、变量的操作

1.变量的创建

有两种创建变量的方法。
第一种:只定义出变量,但变量中没有初始值

类型名 变量名;

第二种:直接给创建的变量一个初始值

类型名 变量名 = 初始值;

例如创建出一个int类型的变量a,创建的方法如下:

int a;

变量名的的命名规制如下:

  1. 变量名不能为保留字
  2. 只能以数字、大小写字母、下划线组成
  3. 不能以数字开头

2.变量的使用

2.1 变量的赋值

这里变量的使用就只有重新赋值和输出内容
对变量重新赋值,使用的运算符 = ,例如将创建出来的变量a赋值为20

int a = 10;
a = 20;

执行完后a的值就为20。

2.2 变量的加减

这里可以使用变量中的内容进行相加或者相减等运算符,也可以将加减的内容重新赋给一个变量

int a = 10, b = 20, c;
c = a + b;

2.3 变量的隐式类型转换

当两个不同的类型相加或者相减,变量之间会实现一个隐式类型的转换,例如:有一个变量的类型为 int 类型,这个类型和一个 char 类型的变量相加,得到的类型会变成 int 类型,可以使用下面的代码验证

int a = 10;
char b = 5;
printf("%d", sizeof(a + b));

输出的结果为4。
隐式类型转换是两个不同类型进行运算时将其中小的类型自动转换为一个大的类型。

2.4 强制类型转换

如果有一个 int 类型,想让它变成一个 char 类型,这个时候没有办法使用 隐式类型转换 ,那这个时候就只能强制它进行转换,所以就得使用 强制类型转换 ,强制类型转换的写法如下:

(目标类型)变量名;

按照这个写法将上面的问题解决:

int a = 10;
(char)a;

这样 int 类型的a变量就会强制转换为 char 类型。
强制类型转换是将一个大类型强制转换为一个小类型

3.查看变量的类型

C语言中没有直接调用就可以输出变量的类型的函数,但可以通过查看变量所占的字节数来推断出这个变量所占的类型,利用的关键字为 sizeof() ,这个关键字会返回在括号里的内容所占的字节数,可以通过返回的字节数来判断这个内容的类型。
比如说返回的是4,那可能是 int 类型或者是 float 类型,如果返回的是1,那可能是 char 类型。
这种方法只能用在使用内置数据的变量中,如果对自定义的数据类型或者是自定义函数中是不能使用的。
例如要输出一个变量所占字节:

int main(){
int a = 10;
printf("%d", sizeof(a));
}

三、全局变量和局部变量

全局变量顾名思义,就是在全局都可以使用的一个变量,它声明一般是在函数外进行声明。
局部变量是在局部创建的,只能在这个范围中才能使用,这个范围一般叫做作用域,出了这个作用域之后局部变量就不能使用了。

1.作用域

在C语言中,作用域一般是使用 {} 进行区分,比如说有一个函数

void test(){

}

这个函数的作用域就是从 { 开始,一直到 } 结束,在这个区间就属于 test 函数的作用域。

2.局部变量和全局变量的使用问题

比如说选择有一个代码

#include <stdio.h>
int a = 10;
int main(){
int a = 5;
printf("%d", a);
return 1;
}

这里输出的a的值为多少?
答案是5,因为在局部中使用重名的全局和局部变量时,优先使用的是局部的变量。
如果是下面这种情况:

#include <stdio.h>
int a = 10;
void test(){
int a = 5;
printf("%d", a);
}
int main(){
test();
printf("%d", a);
return 1;
}

这个代码的输出结果为多少呢?答案是5和10。

四、常量

常量顾名思义就是不会改变的量,在C语言中有两种创建常量的方式

1.#define

使用宏定义 #define 创建出常量,创建的方法很简单,就是 #define 常量名 值
创建完后不需要写分号结束,例如创建一个常量 AGE

#define AGE 18

这个常量就创建好了,而这个常量创建的地方是在全局中创建,所以在整个文件中都可以使用

2.const修饰

const 是将可变量变为不可变量的一个修饰词,使用这个修饰词减变量修饰为不可变的量也可以间接达到常量的方法

int main(){
const int a = 10;
}

上面的代码就可以将a这个变量修饰为一个常量了,但记住在使用 const 修饰的时候,一定要给这个变量一个初始值,否则后面没有办法再给这个变量一个初始值了,这种方法一般用在局部。

总结

变量的使用是非常简单的,后面的使用还是比较多,慢慢记住就可以了。常量一般对于一些固定的值进行固定,让它不轻易修改。

C语言变量常量的更多相关文章

  1. JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

    JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...

  2. C语言变量声明内存分配

    转载: C语言变量声明内存分配   一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结 ...

  3. C语言变量的类型和存储位置

    . C语言变量主要分为全局变量.静态全局变量.局部变量.静态局部变量和寄存器变量.其中静态变量用static关键字进行修饰.程序所占用的内存可以分为以下几个部分: ()代码段-存放程序代码,只读的,不 ...

  4. Java复习3.变量.常量.String.

    Java 中的变量常量数据类型 20131004 前言: 还是国庆节,无聊的很,就没事复习点Java的知识,其实C/C++基本上是现在大型企业面试的语言,但是多学习点Java是没有坏处的,而且,将来工 ...

  5. Go语言【第八篇】:Go语言变量作用域

    Go语言变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围,Go语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量: 函数外定义的变量称为全局变量: 函数 ...

  6. GO语言学习(十三)Go 语言变量作用域

    Go 语言变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. Go 语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函 ...

  7. go语言变量作用域

    Go 语言变量作用域 作用域为已声明标识符所表示的常量.类型.变量.函数或包在源代码中的作用范围. Go 语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函 ...

  8. GO中标识符,标识符,变量,常量,iota

    参考:https://www.cnblogs.com/nickchen121/p/11517455.html 一.标识符与关键字 1.标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变 ...

  9. Go语言之Go语言变量

    GO 语言变量 Go语言是静态类型语言,因此变量(variable)是有明确类型的,编译器也会检查变量类型的正确性. 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函 ...

  10. 06 C语言变量

    C语言变量 变量的本质 变量的本质其实是程序可操作的存储区的名称. C 中每个变量都有特定的类型,类型决定了变量存储的大小的范围,在范围内的值都可以存储在内存中,运算符可应用于变量上. 变量的名称可以 ...

随机推荐

  1. DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍

    DeepSpeed Chat: 一键式RLHF训练,让你的类ChatGPT千亿大模型提速省钱15倍 1. 概述 近日来,ChatGPT及类似模型引发了人工智能(AI)领域的一场风潮. 这场风潮对数字世 ...

  2. 笔记:C++学习之旅---初识C++

    笔记:C++学习之旅---初识C++          博主也是一个新手,学习编程才一年左右,刚大学毕业不久,以前在学校学习的语言主要是C,本人是从嵌入式学起的!我现在从事的公司主要是C++,所以我也 ...

  3. 求解 LCA の方法

    最近公共祖先(LCA) 最近公共祖先简称 LCA(Lowest Common Ancestor).两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个. -----oi wiki 举个例 ...

  4. #PowerBi 1分钟学会,在excel中,调用powerbi数据模型(Analyze in Excel插件)

    在工作中,我们常常使用excel来进行临时的数据处理服务,如果我们在powerbi中,已经有了完整的数据模型. 那么我们都可以通过直接调用powerbi数据模型,来进行快速的数据分析,完成任务. 今天 ...

  5. 使用STM32CubeMX生成ThreadX实时操作系统工程模板

    博客主页:链接.转载请注明出处! 由于需要在stm32上使用USB Host CDC-ECM,连接EC20发送数据到服务器,接触到了ThreadX实时操作系统. 在调研过程中,发现stm32官方USB ...

  6. 2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质。比如8,9

    2021-05-31:怎么判断n个数俩俩互质?比如7,8,9任意两个数最大公约数是1,所以7,8,9两两互质.比如8,9,10不是两两互质,因为8和10的最大公约数是2. 福大大 答案2021-05- ...

  7. 代码随想录算法训练营Day9|字符串KMP算法总结

    代码随想录算法训练营 代码随想录算法训练营Day9字符串|KMP算法 8. 实现 strStr() 459.重复的子字符串 字符串总结 双指针回顾 28. 实现 strStr() KMP算法 题目链接 ...

  8. C++面试八股文:指针占用多少个字节?

    某日小二参加XXX科技公司的C++工程师开发岗位4面: 面试官:memset.memcpy和strcpy的区别是什么? 小二:memset用于将一块内存设置为特定的值, memcpy用于将一块内存从一 ...

  9. 自研ORM 完美支持 Exists查询 非常灵活

    示例代码 Case 1 Code var data = db.Query<Product>() .Where(w => db.Query<Product>().Where ...

  10. Windows操作系统中常用的Dos命令

    打开CMD的方式: Win+R 输入cmd打开控制台(推荐使用) 在任意文件夹下,按住shift键,点击鼠标右键,选择在此处打开命令行窗口 在资源管理器的地址栏路径前面加上cmd+空格: 常用的Dos ...