龙空技术网

零基础学C语言(6):变量与常量

流光月痕 155

前言:

此时各位老铁们对“c语言宏常量能当右值吗”大致比较讲究,小伙伴们都想要剖析一些“c语言宏常量能当右值吗”的相关知识。那么小编在网络上搜集了一些对于“c语言宏常量能当右值吗””的相关文章,希望姐妹们能喜欢,看官们一起来学习一下吧!

前面我们初步认识了数据类型、常量和变量,并讲完了基本数据类型,那接下来咱们详细介绍下变量和常量。

常量

之前我们介绍了什么是常量,就是在程序的运行中不可以改变的量。常量分为整型常量、浮点型常量、字符常量、字符串常量和符号常量。

1.整型常量

1.1十进制整数

这个不难理解,就是我们常说的自然数。如:

1.2 八进制整数

八进制的数表示为前面带“0”的数。如

1.3 十六进制数

与八进制不同,十六进制整数以“0x”开头,如:

1.4 二进制数

与八进制不同,十六进制整数以“0b”开头,如:

整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意,例如:

2. 浮点型常量

2.1十进制小数形式

这里的后缀“f”在上一节我们说过了,因为不加这个"f" 计算机会分配一个double类型大小的空间,而前面的变量类型又是float,就有可能报错(取决于编译器)。

2.2十进制指数形式

3. 字符常量

3.1普通字符

字符常量需要用单引号表示,或者用ASCII码值,ASCII我们上一节说过了,忘记小伙伴可以回顾下。

3.2转义字符

C语言中用反斜杠“\”加字符表示一直特殊的意义,叫做转义字符。下面是转义字符表:

之前我们在hello world函数提到过“\n”是换行符,也是转义字符的一种。

4. 字符串常量

上一篇中说过,字符串的表示是用双引号" ",而且C语言没有直接定义一个字符串的数据类型,C++中有,所以我们一般用数组表示,例如:char str[] = “ABC”;

这句话的意义是定义一个字符数组,这个大家可以先不了解。“=”右面就表示一个字符串常量。

需要说明的是,字符串的存储比较特殊,系统会自动在字符串后面加入一个'\0'符号。这个符号在转义字符表中可以找到,代表空字符。计算机用它表示一个字符串的结束。因此,"ABC"在内存中其实是"ABC\0"。

那么,问题来了。请问"a"和'a'有什么区别呢?(上一节我们提过)

5. 符号常量

符号常量又叫标识常量,还能称之为宏常量,名字很多,但都是一个意思。在C中,有一种简单的定义常量的方式:使用#define宏定义。

一般格式:#define 标识符名称(常量名) 被替换的目标(常量)

我们来看一个例子:

上面的代码中由于有了第一句,第二句就相当于:double a = 3.14 * 2;

值得注意的是,这种宏常量的表示方法相当于把定义中常量位置的东西原封不动地写在常量名的地方。经常有这样的题目:

这一题的答案是多少?

比较简单,a = 2 * 5 + 1 = 11,所以打印是11,记住,遇到这种问题,整体带入就可以了,不要强行加括号。

总结一下就是:define可以替换常量、简单的运算公式、C语句。其本质:是字符串的整体代换!我们一般把宏定义放在头文件的下面,函数的上面,这样显得有层次感。

变量

常量讲完了,我们来说说变量。之前初识常量、变量的时候说过,变量是程序运行时可以发生改变的量。

定义格式: 存储类型 数据类型 变量名

哎,好像和之前有一丢丢不一样啊,我们前面定义变量都是int a;就可以了,这个int是数据类型,那这个存储类型是什么鬼,别急,先挖个坑。

变量其实只不过是程序可操作的存储区的名称,我们在数据类型的时候,已经详细介绍了每种变量所占的字节数和数据范围,这里就不再重复了。

那这里我们还要细说什么呢?

如果有细心的同学应该会发现,我们定义变量的时候通常会见到int a;和int a =10;这两种形式,那这两种有什么区别呢?

首先,我们要搞清楚三个概念:定义、声明和初始化。

extern int i;就是一种声明,这里我们用到了一个关键字extern,它的作用就是可以引用其他文件中的变量i,是不占存储空间的。

int i;就是定义,是开辟了4个字节的存储空间。

int a = 10;在定义变量的同时给变量赋值,称为初始化。

变量分为全局变量和局部变量,怎么理解呢?

通俗地看,全局变量就是{}外的变量,局部变量就是{}内的变量。

总结

本节给大家详细介绍了变量和常量,其中变量分为全局变量和局部变量,常量分为整型常量、浮点型常量、字符常量、字符串常量和符号常量。同时我们区别了声明、定义和初始化,以及提到一个存储类型,那什么是存储类型呢?下一节介绍。

上节作业分析

以下代码的输出结果是什么?

首先看第一题,定义一个字符变量a,c = ‘a’ + 1就是字符b,所以打印值为b(这里是按%c打印的);再来看第二题,a = 1,b = 2,执行第二句a = 1 + 2 = 3,b = a - b(注意,这里的a经过上一次变成3) = 3 - 2 = 1,a = 3 - 1 = 2。所以打印为2,1。有没有发现a和b互换了。

本节作业

1.下列程序的输出结果是16.00,请填空

#include <stdio.h>

int main()

{

int a = 9, b = 2;

float x = _____,y = 1.1, z;

z = a/2 + b*x/y + 1/2;

printf("%5.2f\n", z);

return 0;

}

2.以下程序运行后的输出结果是:( )

#include <stdio.h>

#define S(x) 4*x*(x)+1

int main()

{

int i=6,j=8;

printf("%d\n",S(i+j));

return 0;

}

温馨提示:第一节有一个很奇怪的链接,大家记得保存哦~

标签: #c语言宏常量能当右值吗 #c语言变量和常量 #c语言16位编译器中下列常量的正确写法是 #c语言中有字符串类型的变量和常量的变量吗 #字符常量和字符串常量有何区别和联系