变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。

变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。基于基本类型,有以下几种基本的变量类型:

类型 描述
char 通常是一个字节(八位)。这是一个整数类型。
int 对机器而言,整数的最自然的大小。
float

单精度浮点值。单精度是这样的格式,1位符号,8位指数,23位小数。

double

双精度浮点值。双精度是1位符号,11位指数,52位小数。

void 表示类型的缺失。

C 语言也允许定义各种其他类型的变量,比如枚举、指针、数组、结构、共用体等等,这将会在后续的章节中进行讲解,本章节我们先讲解基本变量类型。

C 中的变量定义

变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示:

type variable_list;

在这里,type 必须是一个有效的 C 数据类型,可以是 char、w_char、int、float、double 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。下面列出几个有效的声明:

int    i, j, k;

char   c, ch;

float  f, salary;

double d;

行 int i, j, k; 声明并定义了变量 i、j 和 k,这指示编译器创建类型为 int 的名为 i、j、k 的变量。

变量可以在声明的时候被初始化(指定一个初始值)。初始化器由一个等号,后跟一个常量表达式组成,如下所示:

type variable_name = value;

下面列举几个实例:

extern int d = 3, f = 5;    // d 和 f 的声明与初始化

int d = 3, f = 5;           // 定义并初始化 d 和 f

byte z = 22;                // 定义并初始化 z

char x = 'x';               // 变量 x 的值为 'x'

不带初始化的定义:带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。

C 中的变量声明

变量声明向编译器保证变量以指定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。

变量的声明有两种情况:

  • 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。

  • 2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。例如:extern int a 其中变量 a 可以在别的文件中定义的。

  • 除非有extern关键字,否则都是变量的定义。

extern int i; //声明,不是定义

int i; //声明,也是定义

实例

尝试下面的实例,其中,变量在头部就已经被声明,但是定义与初始化在主函数内:

实例

#include <stdio.h> // 函数外定义变量 x 和 y

int x;int y;int addtwonum()

{    // 函数内声明变量 x 和 y 为外部变量

extern int x;

extern int y;    // 给外部变量(全局变量)x 和 y 赋值

x = 1;    y = 2;

return x+y;

}

int main()

{

int result;    // 调用函数 addtwonum

result = addtwonum();

printf("result 为: %d",result);

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

result 为: 3

如果需要在一个源文件中引用另外一个源文件中定义的变量,我们只需在引用的文件中将变量加上 extern 关键字的声明即可。

addtwonum.c 文件代码:

#include <stdio.h>/*外部变量声明*/

extern int x ;

extern int y ;

int addtwonum()

{

return x+y;

}

test.c 文件代码:

#include <stdio.h>  /*定义两个全局变量*/

int x=1;int y=2;

int addtwonum();

int main(void)

{

int result;

result = addtwonum();

printf("result 为: %d\n",result);

return 0;

}

当上面的代码被编译和执行时,它会产生下列结果:

$ gcc addtwonum.c test.c -o main$ ./mainresult 为: 3

C中的左值(Lvalues)和右值(Rvalues)

C 中有两种类型的表达式:

  1. 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。

  2. 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:

int g = 20;

但是下面这个就不是一个有效的语句,会生成编译时错误:

10 = 20;

@value 静态变量_C语言基本知识:变量相关推荐

  1. jstl动态取变量_C语言的变量名

    变量名是用来标识某个内存块的 地址就是地址啦,如是变量名的话,用取地址运算符&就可以得到它标识的内存块的地址, 而指针变量呢,它本身也是一个变量名,只不过它标识的那块内存存放的是一个地址值 变 ...

  2. c语言创造的文件保存路径_c语言怎么把变量写入文件路径

    1. c语言 如何将变量写入文件 比如写入 c盘下面的test.txt文件中. #include #include void main(void) { char achBuf[256]; memset ...

  3. c语言笔记照片_C语言基础知识笔记

    一.C语言的结构 1.Hello world 简单来说,一个C程序就是由若干头文件和函数组成. #include //包含头文件 /* *主函数 */ int main(){ printf(" ...

  4. c打印无符号整数_C语言基础知识:printf的输出格式,C/C++语言编程讲解

    C语言基础知识:printf的输出格式 printf()函数是格式输出函数,请求printf()打印变量的指令取决与变量的类型.例如,在打印整数是使用%d符号,在打印字符是用%c 符号.这些符号被称为 ...

  5. android studio如何设置输出值的小数点_C语言基础知识:printf的输出格式,C/C++语言编程讲解...

    C语言基础知识:printf的输出格式 printf()函数是格式输出函数,请求printf()打印变量的指令取决与变量的类型.例如,在打印整数是使用%d符号,在打印字符是用%c 符号.这些符号被称为 ...

  6. c语言中常见的变量,C语言中的变量详解

    先说说变量的作用域,比如,在函数中,形参变量只是在被调用期间才分配内存单元,调用结束立即释放.这就说明形参变量只有在函授内才是有效的,离开该函数就不能再使用了. 这种变量有效性的范围称为变量的作用域. ...

  7. r语言 分类变量 虚拟变量_R语言中的变量

    r语言 分类变量 虚拟变量 R语言| 变数 (R Language | Variables) In the previous tutorial, we have come across the bas ...

  8. c语言中将32位值赋给16位变量,C语言数据类型和变量-参考.ppt

    C语言数据类型和变量-参考 第3章C数据类型和变量 学习目的和要求: 掌握数据类型和变量的基本概念.特点和使用方法 . 熟练掌握算术.赋值.逗号和sizeof运算符与表达式的使用 . 理解并能应用强制 ...

  9. c语言函数中使用指针变量,C语言函数指针变量

    C语言函数指针变量 导语:在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址. 这就是函数指针变量.下面是相关介绍,仅供参考! 在C语言中规定,一个函数总是占用一 ...

最新文章

  1. 大一计算机在线考试,Word 大一计算机考试操作题
  2. mif_maker2010.exe下载和使用说明
  3. laravel --- composer install之后,项目没有vender目录
  4. 1.7 对新序列采样-深度学习第五课《序列模型》-Stanford吴恩达教授
  5. SourceInsight 汉化
  6. java 中的sql.date_SQL DATE中的时区vs java.sql.Date
  7. gmail收件箱标签设置_通过在Gmail中启用实验室功能来启动收件箱
  8. 实时备份工具之inotify+rsync
  9. python多个对象调用类方法、且之间有联系_趣味解读Python面向对象编程 (类和对象)...
  10. leetcode题库:1.两数之和
  11. 在 Windows 10 中查找 BitLocker 恢复密钥
  12. import tool for Scripter Studio
  13. android对象缓存,【Android教程】缓存对象中的顶点数组和数据索引
  14. c语言小游戏编程弹珠游戏,C/C++知识点之c语言 弹弹球小游戏
  15. 【离散数学】陪集的详解
  16. 专业心率监测器克服了心电噪声和电源的挑战---凯利讯半导体
  17. pytorch 中的 forward 的使用与解释
  18. Freemaker判断是否为空
  19. 达人评测 r7 7735h和i7 13700h选哪个 锐龙r77735h和酷睿i713700h差距
  20. 程序猿真的觉得写代码比女朋友重要吗?

热门文章

  1. 国产GPGPU如何赶超国外?这3条路最有希望
  2. 总结了12个Numpy高级函数,完美解决数据处理,拿来即用!
  3. 什么?print 函数还可以打印彩色围棋局面?
  4. 华为发布政企战略及华为云Stack,瞄准新基建下政企的数字化转型
  5. 防控疫情,我们在行动——爱奇艺战“疫”全纪录
  6. 温暖守护美好生活,科技从不冷冰冰
  7. Github 开源趋势榜 TOP 1:英伟达升级发布二代 StyleGAN!
  8. 你知道该如何搭建 AI 智能问答系统吗?
  9. “10 倍工程师”引争议,程序员再被妖魔化?
  10. 为什么李彦宏会候选院士?