C语言 05 变量与常量
变量
变量就像在数学中学习的 x,y 一样,可以直接声明一个变量,并利用这些变量进行基本的运算,声明变量的格式为:
数据类型 变量名称 = 初始值;(其中初始值可以不用在定义变量时设定)
= 是赋值操作,可以将等号后面的值赋值给前面的变量,等号后面可以直接写一个数字(常量)、变量名称、算式。
比如我们现在想要声明一个整数类型的变量:
// 变量类型为int(常用),变量名称为a,变量的初始值为10
int a = 10;
// 多个变量可以另起一行编写,也可以像这样用逗号隔开,注意类型必须是一样的
int a = 10, b = 20;
其中,变量的名称并不是随便什么都可以的,它有以下规则:
- 不能重复使用其他变量使用过的名字。
- 只能包含英文字母或是下划线、数字,并且严格区分大小写,比如
a和A不算同一个变量。 - 虽然可以包含数字,但是不能以数字开头。
- 不能是关键字(比如上面提到的所有基本数据类型,当然还有一些关键字会在后面认识)
- 使用英文单词,不要使用拼音,多个词可以使用驼峰命名法或是通过下划线连接(建议)。
初始值可以是一个常量数据(比如直接写 10、0.5 这样的数字),也可以是其他变量,或是运算表达式的结果,这样会将其他变量的值作为初始值。
可以使用变量来做一些基本的运算:
#include <stdio.h>
int main() {
// 将10作为a的值
int a = 10;
int b = 20;
// 注意变量一定要先声明再使用,这里是计算a + b的结果(算式),并作为c的初始值
int c = a + b;
}
这里使用到了 + 运算符(之后还会介绍其他类型的运算符)。
这个运算符其实就是数学中学习的加法运算,会将左右两边的变量值加起来,得到结果。
现在虽然做了运算,还不知道运算的具体结果是什么,所以这里通过前面认识的 printf 函数来将结果打印到控制台:
#include <stdio.h>
int main() {
int a = 10;
int b = 20;
int c = a + b;
// 打印变量c
printf(c);
}
但是这样运行不出来结果,会报错。
实际上 printf 是用于格式化打印的,输出变量值:
// 使用%d来代表一个整数类型的数据(占位符),在打印时会自动将c的值替换上去
printf("c的结果是:%d", c);
c的结果是:30
这样,就知道该如何打印变量的值了,当然,除了使用 %d 打印有符号整数之外,还有其他的:
| 格式控制符 | 说明 |
|---|---|
| %c | 输出一个单一的字符 |
| %hd、%d、%ld | 以十进制、有符号的形式输出 short、int、long 类型的整数 |
| %hu、%u、%lu | 以十进制、无符号的形式输出 short、int、long 类型的整数 |
| %ho、%o、%lo | 以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数 |
| %#ho、%#o、%#lo | 以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数 |
| %hx、%x、%lx %hX、%X、%lX | 以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。 |
| %#hx、%#x、%#lx %#hX、%#X、%#lX | 以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。 |
| %f、%lf | 以十进制的形式输出 float、double 类型的小数 |
| %e、%le %E、%lE | 以指数的形式输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。 |
| %g、%lg %G、%lG | 以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。 |
| %s | 输出一个字符串 |
示例:
打印 char 对应的 ASCII 码:
#include <stdio.h> int main() {
char c = 'A';
printf("变量c的值为:%c 对应的ASCII码为:%d", c, c);
}
变量c的值为:A 对应的ASCII码为:65
这里使用 `%c` 来以字符形式输出,`%d` 输出的是变量数据的整数形式,其实就是对应的ASCII码。
让char存储一个数字(ASCII码),同样也可以打印出对应的字符:
#include <stdio.h> int main() {
char c = 66;
printf("变量c的值为:%c 对应的ASCII码为:%d", c, c);
}
变量c的值为:B 对应的ASCII码为:66
不对变量设定初始值,变量会不会有默认值:
#include <stdio.h> int main() {
int a, b, c, d;
printf("%d,%d,%d,%d", a, b, c, d);
}
0,0,32758,-1812918272
可以看到,虽然定义变量但是没有为其设定初始值,那么它的值就是不确定的了(千万注意并不是不设定值默认就是0,至于为什么不是0,这是因为内存分配机制,会在后续进行讲解)
位数不够,导致运算结果值溢出:
#include <stdio.h> int main() {
char c = 127;
c = c + 1;
printf("%d", c);
}
-128
怎么127加上1还变成-128了呢? - 127 + 1= 01111111 + 1
- 由于现在是二进制,满2进1,所以最后变成
- 10000000 = 补码形式的 -128
常量
在运算中,可能也会存在一些一成不变的值,比如 π 的值永远都是 3.1415....。 在程序中,也可以使用这样不可变的变量,称为常量。
定义常量和变量比较类似,但是需要在前面添加一个 const 关键字,表示这是一个常量:

常量在一开始设定初始值后,后续是不允许进行修改的(如果修改,则会编译错误)。
C语言 05 变量与常量的更多相关文章
- Go语言 2 变量、常量和数据类型
文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 2.1 变量 变量是对一块内存空间的命名,程序可以通 ...
- Go语言的变量和常量(三)
我想吐槽下网上的很多所谓的“零基础教程”,因为那根本不算零基础.就拿语言教程来说,一上来就说怎么定义变量的怎么算零基础呢?零基础应该是先告诉你啥叫变量. 所以我从不起零基础的标题.我这也不是教程,只是 ...
- C语言之变量与常量的介绍
一 标示符 标识符:可以理解为是变量名.名字常量表示法的常量名,但是不仅限于这两个 命名规范: 1.起名要有意义,基本要做到一看名字就知道是用来干嘛的(要求你遵守,但不会报错,希望能够养成这样的好习惯 ...
- go语言学习——变量、常量、循环、条件、switch、数组和切片
1.变量 package main import "fmt" func main() { 个或者多个变量. var a string = "initial" f ...
- c语言的变量,常量及作用域等
1.const定义常量 在C语言中,const可以用来定义的一个常量,在变量名前加上const即可. int const a: 定义了一个a的整数常量,且a的值不能被修改.如果要修改a的值,有以下两种 ...
- C语言基础学习基本数据类型-变量和常量
变量和常量 什么是变量和常量?有些数据在程序运行前就预先设定,并在运行过程中不发生变化,称之为常量:有些数据在程序运行中可能发生变化或被赋值,称之为变量. 使用变量前必须先声明一个变量.变量定义的语法 ...
- Go语言基础之变量和常量
Go语言基础之变量和常量 变量和常量是编程中必不可少的部分,也是很好理解的一部分. 标识符与关键字 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函数名等等. Go语 ...
- C语言入门教程-(4)常量和变量
1.常量和变量的概念 程序执行过程中其值不能发生改变的量叫做常量,其值能发生改变的量叫做变量.常量可以直接使用,而变量则必须先定义后才能使用,否则编译器会报错. 2.常量和变量的命名规范 在介绍常量和 ...
- Go语言基础之1--标识符、关键字、变量和常量、数据类型、Go的基本程序结构、Golang的特性
一.前言 当我们项目较为简单时,我们在src目录下新建一个该项目目录,里面存放源码文件即可,见下图: 当我们一个项目较为复杂时,我们可以在src目录下新建一个该项目目录,在针对该项目不同模块创建不同目 ...
- 1.2 Go语言基础之变量和常量
变量和常量是编程中必不可少的部分,也是很好理解的一部分. 一.标识符与关键字 1.1 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名.常量名.函数名等等. Go语言中标识符由字 ...
随机推荐
- 私有git服务器搭建-gitlib版
目录 环境 centos6.5 这里有官网安装地址教程: 这里有机器配置安装需求 CPU Memory 安装步骤 安装配置依赖项 添加GitLab仓库,并安装到服务器上 启动GitLab 配置 git ...
- Cocos Creator 2.x升级至Cocos Creator 3.x
1.导入类时,批量导入 2.导入 override...关键字时,批量导入 3.this.node.scale = 0.6-->this.node.setScale(0.6, 0.6); 4.n ...
- [JS] 获取超星视频题答案
// 解除鼠标限制 var btnn = $(document.getElementById("iframe").contentWindow.document.getElement ...
- 青少年CTF-Crypto(新手版本2.0,无factor1)
凯撒大帝的征讨之路 题目: lnixoa{1x2azz7w8axyva7y1z2320vxy6v97v9a} 知识点:凯撒加密 我的题解: import base64 #shift得出移位多少,移位后 ...
- 因IPv4和IPv6协议不同而引发的第三方接口调用失效的问题
记录一次因IPv4和IPv6协议不同而引发的第三方接口调用失效的问题,仅供大家参考!!! 背景介绍 公司有一个微信小程序,我做后端的,负责给小程序提供数据接口.后来因为一系列原因小程序要对接一个中控( ...
- Cordova下载文件,监听进度,退出疯狂报错
如题. 报错如下: W/cr_AwContents: Application attempted to call on a destroyed WebView java.lang.Throwable ...
- Springboot中-全局异常处理类用法示例
使用springboot搭建web项目的时候,一般都会添加一个全局异常类,用来统一处理各种自定义异常信息, 和其他非自定义的异常信息,以便于统一返回错误信息.下面就是简单的示例代码, 自定义异常信息. ...
- Git修改最近一次提交的日志信息
一.问题由来 当前自己所在的项目组中,每次发完一个版本后,就需要创建个人新版本的git提交凭证,其实就是系统自动 生成的一串编码,如果没有这个凭证,代码是提交不了的,这是公司制定的开发规范之一.这两天 ...
- python queue模块实例解析
一 概念: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,是一种操作受限制的线性表. 进行插入操作的端称为队尾,进行 ...
- QT 使用QPixmap自定义光标 缩放图像模糊问题
QT中定义光标可以使用 Qt::CursorShape 预定义 的光标,也可以使用 QBitmap 和 QPixmap 自己绘制光标.QBitmap 只有黑白2色,QPixmap可以绘制彩色光标.使用 ...