龙空技术网

2.C语言-什么是变量与常量

数字双碳王亮 121

前言:

当前大家对“c语言字符串常量是什么”可能比较注重,看官们都想要了解一些“c语言字符串常量是什么”的相关资讯。那么小编同时在网上网罗了一些有关“c语言字符串常量是什么””的相关文章,希望你们能喜欢,小伙伴们一起来了解一下吧!

1. 几个基础知识

输出%格式化

%c表示输出一个字符;%d 表示输出十进制有符号的整数。%u 表示输出十进制无符号整数。%f 表示输出浮点数。%.2f 表示输出浮点数,保留小数点后两位%s表示输出字符串。%p,%x表示输出指针的值。%e表示输出指数形式的浮点数。

转义符

转义序列

含义

|\ 字符

'

' 字符

"

" 字符

?

? 字符

\a

警报铃声

\b

退格键

\f

换页符

\n

换行符

\r

回车

\t

水平制表符

\v

垂直制表符

\ddd

ddd表示1~3个八进制的数字

\xdd

dd表示2个十六进制数字

int main() {  printf("\'");//打印一个单引号  return 0;}
int main() {  printf("\"");//打印一个双引号  return 0;}
#include<stdio.h>int main() {  printf("\"hello world\"\n");  printf("hello\b");  printf("world\n");  printf("换了一行");  return 0;}
#include<stdio.h>int main(){    printf("\101");     //101表示ASCII码是八进制数101的字符,即字母“A”,65。    return 0;}
#include<stdio.h>int main(){    printf("\x41"); //41表示ASCII码是65,即字母“A”    return 0;}
2. 常量与变量

常量与变量(constant and variate)是数学中反映事物量的一对范畴。常量亦称“常数”,是反映事物相对静止状态的量;变量亦称“变数”,是反映事物运动变化状态的量。

常量就是计算机内存里面不变的数据。

变量就是计算机内存里面需要并且经常改变的数据

内存如何存放数据

在计算机中,指令代码,数据都是存储于内存中。变量也需要存储在内存中,在计算机中,每个变量都被分配了一块内存空间,在这些空间里存储的就是变量的值。变量可以变化,存储空间里的值变化,则变量对应的值也变化,同一时间,内存空间里只能保存一份值,新值将会覆盖。每个内存单元都有编号,这些是内存的地址。

在Debug中Windows下找到Memory

试一个程序

#include<stdio.h>#include<stdlib.h>void main() {  int num = 10;  //&num是返回地址  printf("%d,%x", num, &num);//%d打印数字,%x打印16进制,%p64位  num = 99;  system("pause");//暂停}

看到0a

跳断点后

这里发现地址不打开出来的不一样

运算符&可以为我们取出一个变量的地址,但是这个地址的大小、地址的数据类型和int类型是否相等取决于编译器,取决于是64位架构还是32位架构。所以当我们要让printf为我们输出一个地址时,我们需要用%p,而不是真的直接把它当做一个整数。地址和整数并不永远是相同的,这和架构是有关的。

修改%x→%p,再次运行结果正确了。

#include<stdio.h>#include<stdlib.h>void main() {  int num = 10;  //&num是返回地址  printf("num=%d,address=%p", num, &num);//%d打印数字,%x打印16进制  num = 99;  system("pause");//暂停}
3. 变量的内存机制
#include<stdio.h>void main() {  int x;  int y;  int z;  printf("%p,%p,%p", &x, &y, &z);  x = 1;  y = 2;  z = x + y;  getchar();//等待输入}

地址

变量

00000080E014F7C4

x

1

00000080E014F7E4

y

2

00000080E014F804

z

3

在调试中,窗口,切换汇编

EAX 是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。

ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。

CPU运行指令流程

4. 变量命名规则

规则

变量名的开头必须是字母或下划线,不能是数字。实际编程中最常用的是以字母开头,而以下划线开头的变量名是系统专用的。变量名中的字母是区分大小写的。比如 a 和 A 是不同的变量名,num 和 Num 也是不同的变量名。变量名绝对不可以是C语言关键字变量名中不能有空格。这个可以这样理解:因为上面我们说过,变量名是字母、数字、下划线的组合,没有空格这一项。

命名规范

定义变量的时候,变量名最好要有明确的含义,这样可以提高代码的可读性。不管是自己写程序,还是别人读你的程序,都会很舒服。

通常较短的单词可通过去掉“元音”形成缩写,比如表示“个数”的 count 可以缩写成 cnt;较长的单词可取单词中的几个字母形成缩写;对于一些单词还有大家公认的缩写,比如: temp 可缩写为 tmp; //temp是“临时”的意思 flag 可缩写为 flg; //flag是“标志位”的意思 statistic 可缩写为 stat; //statistic是“统计”的意思 increment 可缩写为 inc; message 可缩写为 msg;除⾮必要,不要⽤数字或较奇怪的字符来定义标识符。命名规范必须与所使⽤的系统风格保持⼀致,并在同⼀项⽬中统⼀。

区分大小写

#include<stdio.h>void main() {  int x = 10;  int X = 10;  printf("%p,%p", &x, &X);//看一下这两个有地址是否相同  }

标准代码

#include<stdio.h>void main() {  int num1=10;  int num2=20;  int result= num1 + num2;  printf("num1+num2=%d",result);}

变量的命名规则要求⽤“匈⽛利法则”

匈⽛利命名法通过在变量名前⾯加上相应的⼩写字母的符号标识作为前缀,标识出变量的作⽤域、类型等。这些符号可以多个同时使⽤,顺序是先m_(成员变量)、再指针、再简单数据类型、再其它。这样做的好处在于能增加程序的可读性,便于对程序的理解和维护。

匈⽛利命名法关键是:标识符的名字以⼀个或者多个⼩写字母开头作为前缀;前缀之后的是⾸字母⼤写的⼀个单词或多个单词组合,该单词要指明变量的⽤途。

bool ⽤b开头 bFlgint ⽤i开头 iCountshort int ⽤n开头 nStepCountlong int ⽤l开头 lSumchar ⽤c开头 cCountunsigned char ⽤by开头float ⽤f开头 fAvgdouble ⽤d开头 dDetaunsigned int(WORD) ⽤w开头 wCountunsigned long int(DWORD) ⽤dw开头 dwBroad

找出以下命名有问题的来

new、5abc、count、!count、if、do、L_5、Who、a123、_A、printf、A.B.Rick、day、Date、3days、user_name、_123、c#、z-5、sum、#33、lotus_1_2_3、char、a<b、 _above、$123

注意:不要将变量命与函数名搞成一样

#include<stdio.h>void main() {  int getchar = 100;//getchar是一个函数  int x = 10;  int sum = getchar + x;  printf("%d",x);}

你会发现getchar 这个本身是个函数,这样当变量也没出错

#include<stdio.h>void main() {  int getchar = 100;//getchar是一个函数  int x = 10;  int sum = getchar + x;  printf("%d",x);  getchar();//这时出错了,编译器不清楚这个是来自stdio中的函数,还是变量了}
5.变量定义与初使化

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

变量是指程序执行过程中,其值可以改变的量。变量有一个名字,称为变量名,用标识符表示

type variable_name;

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

在C语言中,变量只有先声明,才能使用。

#include<stdio.h>void main() {  int x;  int i, j, k;  char c;  float f, salary;  double d;}

声明时初使化

type variable_name=value;

#include<stdio.h>void main() {  int x, y = 10;//这里x是不会初使化的  int i = 5, j = 10;  printf("%d,%d", x, y);}

这里会出错 uninitialized local variable 'x' used

#include<stdio.h>void main() {  printf("%d",x);//这个会出错的,范围不同}void print() {  int x = 10;}
//还是会出错void main() {  printf("%d",x);}int x = 10;//全局void print() {  }
#include<stdio.h>int x = 10;void main() {  printf("%d",x);//这样才是对的}void print() {  }

变量使用前一定初使化

在一些版本编辑器上,不初使化,程序可以编译过去,但定义的变量会有一个不可预知的值。

变量定义即在分配内存空间,这个空间内可能是杂乱无章的,使用时需初始化是必须的,该清零清零。

我们在code:block下编译不出错,

#include<stdio.h>void main() {  int x,y,z;  printf("%d,%d,%d",x,y,z);  getchar();}

这个值是随机出现。

你在vs2022下找命令行提示运行

x64_x86 Cross Tools Command Prompt for VS 2022 LTSC 17.4

使用cl命令编译,同样会出现异常数据。

6.常量

常量,又称 字面量,是固定值,在程序执行期间不会改变。

C 语言中的常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。

常量 就像是常规的变量,只不过常量的值在定义后不能进行修改。

使用 const 前缀声明指定类型的常量

const type variable = value;

#include<stdio.h>void main() {  const float PI = 3.14;  printf("%f", PI);}

#define 预处理器

#define identifier value

#include<stdio.h>void main() {  #define PI 3.1415926 //常量宏  printf("%f", PI);}
#include<stdio.h>void main() {  #define PI "hello world"  printf("%s", PI);}

#define与const区别

const 定义的是变量不是常量,只是这个变量的值不允许改变是常变量!带有类型。编译运行的时候起作用存在类型检查。

define 定义的是不带类型的常数,只进行简单的字符替换。在预编译的时候起作用,不存在类型检查。

#include<stdio.h>#define 开始 main#define 无参数 void无参数 开始() {  #define PI "这都行!"  printf("%s", PI);}

编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。

#include<stdio.h>void main() {  #define NUM 3.14159 //常量宏  const double Num = 3.14159;  double i = Num;   double I = NUM;  double j = Num;  double J = NUM;}

一个神奇应用

新建一个.h头文件

define.h

#include<stdio.h>#define 入口 main#define 无参数函数 void#define 打印 printf
#include"define.h" //自己写的头文件用“",系统的用<>无参数函数 入口() {  int x = 10;  printf("%d", x);}

再试一下这个

#include<stdio.h>#define 入口 main#define 无参数函数 void#define 打印 printfvoid showtask() {  system("tasklist");}#define 查看进程 showtask();

会发现;都可以不用写了

#include"define.h"无参数函数 入口() {  int x = 10;  打印("%d", x);  查看进程}
7.习题

实现从1到5,每次加一次,打印出结果

#include<stdio.h>void main() {  int x = 0;  x = x + 1;  printf("%d\n", x);  x = x + 2;  printf("%d\n", x);  x = x + 3;  printf("%d\n", x);  x = x + 4;  printf("%d\n", x);  x = x + 5;  printf("%d\n", x);}

实现两个变量的数据交换

#include<stdio.h>void main() {  int x = 10;  int y = 20;  int tmp = 0;  tmp = x;  x = y;  y = tmp;  printf("%d,%d", x, y);}

不需要中间变量怎么做?

#include<stdio.h>void main() {  int x = 10;  int y = 20;  x = x + y;//30  y = x - y;//10  x = x - y;//20  printf("%d,%d", x, y);}

使用两种定义常量方法定义一个物料的类型

#include<stdio.h>#define MLFB "6es7-001"const char mlfb[] = "6es7-001";void main() {  printf("%s,%p\n", MLFB,&MLFB);  printf("%s", mlfb);}

标签: #c语言字符串常量是什么 #c语言常量的定义 #找不到c语言变量定义 #unsignedlongc语言 #c语言中的换行符什么意思呀