文章目录
一.变量与常量的概念
在C语言编程中,理解变量与常量的概念是基础且关键的一步,它们是数据存储和操作的核心。
1.1变量
变量是程序中用于存储数据值的标识符,其在程序执行过程中的值是可以改变的。每个变量都有一个数据类型,它定义了变量存储的数据种类(如整数、浮点数、字符等)以及占用的空间大小。
特点:
- 可变性:变量的值在程序运行时可以被改变。
- 不可变性:变量所占的存储单元地址可以随时改变,一个变量实质上代表了内存中的某个存储单元。
- 类型性:变量声明时必须指定数据类型。
- 标识性:变量通过唯一的标识符(变量名)进行访问,即程序中用到的所有变量名都必须有一个名字作为标识,变量的名字是由用户定义,它必须符合标识符的命名规则。
示例:
int age = 25; // 声明一个整型变量age,并初始化为25
age = 26; // 更新age变量的值为26
1.2常量
常量是一种在程序定义后其值不能被修改的标识符。在C语言中,常量可以是直接量(如字面常量5
、'a'
),也可以是通过#define
预处理指令或使用const
关键字定义的命名常量。
特点:
-
不变性:一旦定义,常量的值不可更改。
-
类型性:常量具有确定的数据类型。
-
标识性:命名常量通过唯一的标识符进行访问。
示例:
#define MAX_SIZE 100 // 使用#define定义的常量
const int minSize = 10; // 使用const关键字定义的整型常量
1.3变量与常量的比较
虽然变量和常量在使用中都承担着数据存储的角色,但它们在数据的可变性上有本质的区别。变量的值在程序运行时可以改变,适用于存储计算过程中可能变化的数据;而常量的值一旦定义就不可更改,适用于存储不变的数据,如配置参数、状态码等。
那么,选择变量还是常量?
在实际编程中,合理选择使用变量或常量对于提高代码的可读性和维护性非常重要。一般原则是:
- 当数据值需要在程序执行过程中改变时,使用变量。
- 当数据值固定不变,或者你希望保护该值不被意外修改时,使用常量。
二.变量
在C语言中,变量声明是程序中定义变量的过程,它告诉编译器变量的名称,类型以及可能的初始值。正确声明和使用变量是编写高效,可维护C程序的关键。
2.1变量声明
声明变量时,必须指定变量的类型和名称。基本的变量声明语法如下:
type variable_name;
- 类型(
type
):变量的数据类型,如int
、float
、char
等。 - 变量名(
variable_name
):变量的标识符,用于在程序中引用该变量。
示例:
int age;
float salary;
char grade;
2.2变量初始化
在声明变量时,可以同时为其赋初值,这称为变量的初始化。初始化语法如下:
int age=25;
float salary=4500.50;
char grade = 'A';
初始化变量有助于程序的可读性,并可以防止未初始化变量的潜在错误。
2.3命名规范
选择有意义的变量名是良好编程风格的重要部分。以下是一些命名变量时的建议:
- 使用有描述性的名称,使变量的用途清晰。
- 避免使用单字母变量名,除非在短小函数或循环中。
- 对于多个单词的变量名,可以使用下划线分隔(
snake_case
)或驼峰命名法(camelCase
)。
2.4变量作用域
变量的作用域决定了在程序的哪个部分可以访问该变量。C语言中主要有两种作用域:
- 局部变量:在函数或块内声明的变量,只能在其声明的函数或块内访问。
- 全局变量:在所有函数外部声明的变量,可以在程序的任何地方访问。
合理安排变量的作用域,可以提高程序的模块化和减少变量冲突。
2.5使用const限定符
使用const
限定符可以定义常量变量,即一旦赋值后就不允许更改的变量。这对于需要保护的值非常有用。
const int MAX_AGE=100;
三.常量
常量可以是任何的基本数据类型,比如整数常量,浮点常量,字符常量,或字符串常量,也有枚举常量。
3.1整数常量
整数常量可以是十进制,八进制或十六进制的常量,前缀指定基数:Ox或OX表示十六进制,O表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是U和L的组合,U表示无符号整数(unsigned),L表示长整数(long),后缀可以是大写,也可以是小写,U和L的顺序任意。
212
合法
215u
合法
OXFeeL
合法
O78
非法:8不是八进制的数字
O32UU
非法:不能重复后缀
3.2浮点常量
浮点常量是由整数部分,小数点,小数部分和指数部分组成的。可以使用小数形式或者指数形式来表示浮点常量。
当使用小数形式表示时,必须包含整数部分,小数部分,或者同时包含两者。
当使用指数形式表示时,必须包含小数点,指数或同时包含两者。带符号的指数是用e或E引入的。
3.14159
合法
314159E-5L
合法
510E
非法:不完整的指数
210f
非法:没有小数或指数
.e55
非法:缺少整数或分数
以字母e或E代表以10为底的指数,需要注意的是e和E之前必须要有数字,且e和E后面必须为整数。例如:
12.34e3
表示12.34*10^3
-67.89e-16
表示-67.89*10^-16
后缀F/f表示该常数用浮点方式存储,相当于float
3.3字符常量
字符常量是括在单引号中,例如,'x’可以存储在char类型的简单变量中。
字符常量可以是一个普通的字符(例如’x’)、一个转义序列(例如’\t’)或一个通用的字符(例如’\u02C0’)。未赋值的系统自动补全为’\0’
(1)普通字符常量:用单引号括起来的一个字符,如’a’ , ‘B’ , ‘3’ , ‘@’ , ‘#’.不能写成’ab’或’12’.注意单引号只是个界限符,字符是指用单引号括起来的符号,不包括单引号。字符型在内存中是以ASCII码形式存储的,例如字符’a’的ASCII码的十进制为97(A为65),在存储单元中存放的是97的二进制形式。
(2)转义字符:C语言中还有一种特殊形式的字符常量,是以字符\开头的字
转义序列 | 含义 |
---|---|
\ | \字符 |
’ | '字符 |
" | "字符 |
? | ?字符 |
\a | 警告提示音 |
\b | 退格删除符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\o | 八进制形式 |
\x | 十六进制形式 |
\ooo | 一到三位的八进制数 |
\xhh… | 一个或多个数字的十六进制数 |
-
字符常量的ASCII值可以通过强制类型转换转换为整数值。例如:
char myChar='a'; int myAsciiValue=(int)myChar;//将myChar转换为ASCII值 97
3.3字符串常量
字符串常量是括在双引号中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。
可以使用空格做分隔符,把一个很长的字符串常量进行分行。
下面的实例显示了一些字符串常量。下面这三种形式所显示的字符串是相同的。
"hello,dear"
"hello,\
dear"
"hello," "d" "ear"
字符串常量在内存中以null
终止符\0
结尾。例如:
char myString[] = "Hello,world!";//系统对字符串常量自动加一个 '\0'
3.4地址常量
每一个常量、变量、数组的地址在程序运行期间是不能够改变的,称为地址常量。
定义的变量,在内存中有地址,这个地址是常量。
C语言中如何取一个常量的地址?
在C语言中,常量通常是通过
#define
指令或者const
关键字定义的。由于常量的值在程序运行期间不会改变,因此直接取常量的地址在某些情况下会导致错误。&是取地址运算符,只能对变量直接取地址,不能对常量直接取地址。在C语言中,取一个常量的地址的方法是:使用指针、将常量赋值给一个变量、使用const
关键字。其中最常见的方法是通过将常量赋值给一个变量,然后取这个变量的地址。下面详细描述这一方法。
通过变量取常量的地址
#include <stdio.h> #define PI 3.14159 int main() { float pi_value = PI; // 将常量的值赋给变量 float *pi_ptr = &pi_value; // 取变量的地址 printf("PI value: %fn", pi_value); printf("Address of PI: %pn", (void*)pi_ptr);//通过指针访问地址,常量没有返回值,用void类型的指针 return 0; } //输出:PI value: 3.141590nAddress of PI: 000000000062FE14n
使用
const
关键字和指针可以使用const关键字定义一个常量,然后直接使用指针指向它:
#include <stdio.h> int main() { const int num = 100; const int *num_ptr = # // 使用指针指向常量 printf("Value of num: %dn", num); printf("Address of num: %pn", (void*)num_ptr);//通过指针访问常量的值,常量没有返回值,用void类型的指针 return 0; } //输出:Value of num: 100nAddress of num: 000000000062FE14n
使用指针访问常量
通过指针访问常量的值可以提供更大的灵活性,特别是在需要通过函数传递常量时。以下是一个具体的例子:
#include <stdio.h> void print_constant(const int *ptr) { printf("Value of constant: %dn", *ptr); } int main() { const int num = 50; print_constant(&num); // 常量num的地址被传递给函数printf_constant,并通过指针访问常量的地址 return 0; } //输出:Value of constant: 50n
上面的代码还可以写成:
#include <stdio.h> void print_constant(const int *ptr) { printf("Value of constant: %dn", *ptr); } int main() { const int num = 50; const int* p=#//使用指针指向常量 print_constant(p); //将该指针传递给函数 return 0; }
3.5定义常量
在 C 中,有两种简单的定义常量的方式:
- 使用 #define 预处理器: #define 可以在程序中定义一个常量,它在编译时会被替换为其对应的值。
- 使用 const 关键字:const 关键字用于声明一个只读变量,即该变量的值不能在程序运行时修改。
注意:把常量定义为大写字母形式是一个很好的编程习惯
#define预处理器
下面是使用#define预处理器定义常量的形式:
#define identifier value
实例:
#include<stdio.h>
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main(){
int area;
area=LENGTH*WIDTH;
printf("value of area:%d",area);
printf("%c",NEWLINE);
return 0;
}
const关键字
可以使用const前缀声明指定类型的常量,如下所示:
const type variable=value;
实例:
#include<stdio.h>
int main(){
const int LENGTH=10;
const int WIDTH=5;
const char NEWLINE='\n';
int area;
area=LENGTH*WIDTH;
printf("value of area:%d",area);
printf("%c",NEWLINE);
return 0;
}
标签:字符,const,常量,int,C语言,变量,define From: https://blog.csdn.net/2301_79279099/article/details/142004654#define与const区别
#define 与 const 这两种方式都可以用来定义常量,选择哪种方式取决于具体的需求和编程习惯。通常情况下,建议使用 const 关键字来定义常量,因为它具有类型检查和作用域的优势,而 #define 仅进行简单的文本替换,可能会导致一些意外的问题。
#define 预处理指令和 const 关键字在定义常量时有一些区别:
- const常量是在编译时分配内存,而#define是在预处理时进行文本替换,不会分配内存。
- const常量有类型,可以进行类型检查,而#define没有类型,只是简单的文本替换。
- const常量可以进行地址取值操作,而#define不可以。
- const常量可以在多个文件中共享,而#define只能在定义它的文件中使用。
- const常量可以进行调试,而#define不可以。
因此,建议在定义常量时优先使用const,而不是#define。