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语言中标识符由字 ...
随机推荐
- core-js/modules/es7.arrat......................报错
拉入代码之后出现如图提示,导致原因是因为core-js版本太高,可以用cnpm install core-js@2成功解决,安装一个项目前最后将node-moudel删除,重新安装
- 【Azure 应用服务】Azure SignalR 是否可以同时支持近十万人在线互动
什么是 Azure SignalR 服务? Azure SignalR Service 简化了通过 HTTP 向应用程序添加实时 Web 功能的过程. 这种实时功能允许服务将内容更新推送到连接的客户端 ...
- MVVM框架模式
MVC框架模式 MVP框架模式 MVVM框架模式 MVVM模式即: 1.Model:数据层.网络数据操作,file文件操作,本地数据库操作: 2.View:视图层.布局加载,ui交互. 3.ViewM ...
- C++socket服务器与客户端简单通信流程
服务器和客户端简单通信的流程,做一个简单的复习: 1.服务器创建的流程 代码如下,各个重要函数已经写注释: #include <iostream> // 推荐加上宏定义 #define W ...
- 万字博文让我们携手一起走进bs4的世界【python Beautifulsoup】bs4入门 find()与find_all()
目录 Beautiful Soup BeautifulSoup类的基本元素 1.Tag的name 2.Tag的attrs(属性) 3.Tag的NavigableString 二.遍历文档树 下行遍历 ...
- Codeforces Round 829 (Div. 1)A1. Make Nonzero Sum (easy version)(思维找规律)
先考虑无解的情况:当n为奇数时无解 相邻的两个元素一定可以变成0 \[a[i] != a[i + 1]时, 分成[i, i], 和[i + 1, i + 1] \] \[a[i] = a[i + 1] ...
- 基于 XAF Blazor 的规则引擎编辑器
开源项目地址:https://gitee.com/lowcodexaf/rules-engine-editor 前言 本项目是基于XAFBlazor的规则引擎编辑器,规则引擎采用的是微软开源的Rule ...
- Swagger (API框架,API 文档 与API 定义同步更新)
1.依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...
- 摆脱鼠标系列 - 百度搜索 - 火柴 - 快捷键 Ctrl两次
摆脱鼠标系列 - 百度搜索 - 火柴 - 快捷键 Ctrl两次 有两款软件 utools 和 火柴,试用后觉得火柴符合试用功能 这里只用网络搜索 其他功能均不用 搜索用双核浏览器 因为用的老的chro ...
- Hibernate之list和iterator
在Hibernate3中将Session.find(),Session.iterator()换成:session.createQuery().list(),session.createQuery(). ...