C语言-常量和变量-(详细讲解)

一、变量的定义

1. 变量的概念

在程序运行的过程中,可以改变值的变量称为变量。

2. 变量的定义格式

<存储类型> <数据类型> 变量名 = 初始值;
	

1. 存储类型(可以省略不写)6auto  volatile  register  static  extern  const 
	
2. 数据类型
	基本类型(整形,字符,实型,枚举)
	构造类型(数组,结构体,共用体/联合体)
	指针类型
	例如:
	short / int / long / long long / char / float / double
	
	如果是无符号时,前边加unsigned

3. 变量名 命名的规则
	1> 可以由字母,数字,下滑线组成
	2> 不可以是数字开头
	3> 在C语言中,变量名严格区分大小写, 比如:Max  和 max 是两个不同的变量
	4> 不可以是C语言中的关键字
	5> 定义的变量名要做到“见名知意”
	
	举例:
		maxValue		---> OK
		max_value		---> OK
		_max_value		---> OK
		3_max			---> ERROR
		int				---> ERROR ,C语言的关键字
		Int				---> OK, 但是不建议使用
		zdz				---> OK, 变量名的含义不明确
		zxz				---> OK,变量名的含义不明确
		retVal			---> OK, 返回值变量名
	
	变量名命名法:
	驼峰命名法:
		大驼峰命名法:每个单词的首字母大写
			MaxValue  MinValue  GetValue SetValue
		
		小驼峰命名法:首个单词的字母小写,后边每个单词字母大写
			maxValue  minValue  getValue setValue
	波谷命名法:多个单词之间使用"_"隔开
			max_value  min_value  get_value set_value
			_max_value  _min_value  _get_value _set_value
			
4. C语言的关键字,共计有32个
	数据类型相关的关键字12个:
	char short int long float double enum  struct union unsigned signed void
	存储类型相关的关键字6个:
	auto  volatile  register  static  extern  const 
	类型重定义的关键字1个:
		typedef
	计算数据类型大小1个:
		sizeof
	控制语句相关的关键字12个:
	if else switch case default for while do break continue return goto 

3. 定义变量

#include <stdio.h>

int main(int argc, const char *argv[])
{
 // 1. 先定义变量,后对变了进行初始化
 // 定义变量, 给变量在内存中分配空间,分配空间的大小跟变量的类型有关,可以使用变量名访问对应的变量空间内存中的值。
 int a; 
  
 // 将100值写到变量a对应的内存空间中
 a = 100; 
 
 // 读取变量a对应的内存空间的值
 printf("a = %d\n", a);
     
 
 // 2. 定义变量的同时进行初始化,给变量分配空间的同时,进行赋值操作
 float pi = 3.1415; 
 
 // %f : 默认保留小数点的后6位
 printf("pi = %f\n", pi);
 
 // 3. 定义字符类型的变量,可以使用字符的ascii码值进行赋值,也可以使用字符进行赋值,字符需要使用单引号括起来
 char c1 = 97;

 printf("c1 = %c\n", c1);    // 打印ascii码值对应的字符
 printf("c1 = %d\n", c1); // 打印字符的ascii码值
 
 char c2 = 'A';
 printf("c2 = %c\n", c2); // 打印字符 
 printf("c2 = %d\n", c2); // 打印字符的ASCII码值
 
 // 4. 相同数据类型的变量可以直接赋值
 int b = a; // 使用int类型的a变量,对b变量进行赋值
 printf("b = %d\n", b);//打印b的值

 return 0;
}

二、常量的定义

1. 整型常量

常量:程序运行过程中,不可以发生改变的量
例如:

整形常量可以使用二进制,八进制,十进制,十六进制表示。
	比如:0b11111111  01234    10086    0xFFFF
	
对于整形常量一般使用整形的变量存储对应的值。

具体使用short类型,int类型,long类型,long long类型,
以及有符号类型还是无符号类型,需要根据自己数据的大小最终来确定。
例如:
#include <stdio.h>

int main(int argc, const char *argv[])
{
    printf("%d\n", 10086);
    printf("%u\n", 10086);
    printf("%#x\n", 0x10086);
    printf("%#o\n", 010010);
    
 // 定义变量存储身高
 short height = 183;
 printf("身高 = %dcm\n", height);
 
 int a = 0b11111111;
 printf("a = %d\n", a);
 printf("a = %#o\n", a);
 printf("a = %#x\n", a);
 
 int b = 0123;
 printf("b 的十进制值 :%d\n", b);
 printf("b 的八进制值 :%#o\n",b);
 printf("b 的十六进制值 :%#x\n", b);
 
 unsigned long x = 0xFFFFFFFFFFFF;
 printf("x = %lu\n", x);  // %lu : 无符号长整形
 printf("x = %#lo\n", x);  // %lo:无符号8进制长整形
 printf("x = %#lx\n", x); // %lx : 无符号16禁止长整形


 return 0;
}

2. 实型常量(浮点型常量)

对于浮点型的变量,可以使用实型常量进行赋值。
及浮点型的常量需要使用浮点型的变量进行存储。

方式1:小数形式表示
	比如:3.14  1.83

方式2:科学计数法
	比如:
	3.14e2 ---> 3.14 * 10^2 ---> 314.0
	3.14e-2 ---> 3.14 * 10^-2 ---> 0.0314
	
	-3.14e2 ---> -3.14 * 10^2 ---> -314.0
	-3.14e-2 ---> -3.14 * 10^-2 ---> -0.0314
例如:
#include <stdio.h>

int main(int argc, const char *argv[])
{
 printf("%d\n", 10086);
 printf("%f\n", 3.14);
 printf("%le\n",3.1415);

 float pi = 3.14;
 printf("pi = %f\n", pi); // 默认保留小数点后6位
 printf("pi = %e\n", pi); // %e : 以科学计数法格式输出
 
 double height = 18.0345;
 
 printf("height = %lf\n", height); // double类型使用的格式化字符为%lf
 printf("height = %le\n", height); // %le : 科学计数法输出
 
 double wight = -198.1234;
 printf("wight = %lf\n", wight);  
 printf("wight = %le\n", wight);
 
 // 使用科学计数法对浮点型变量赋值
 double length = 10e-2;
 printf("length = %lf\n", length);
 printf("length = %le\n", length);

 return 0;
}

3. 字符型常量

对于字符类型的常量需要使用单引号括起来。
字符常量可以使用字符类型的变量存储。

字符常量举例: 'A'	'\n' '\101' 'a'
		"A" 	---> 字符串,字符串的长度为1

对于字符常量在内存中存储时,存储的时字符的ASCII码值。

在这里插入图片描述

例如:
#include <stdio.h>

int main(int argc, const char *argv[])
{
 // 字符常量
 printf("A = %c\n", 'A');  // 打印A字符
 printf("A char ASCII value = %d\n", 'A');  // 打印字符A的ASCII码值
 
 // 可以使用字符类型的变量存储一个字符
 char c1 = 'a'; // 使用字符复制
 char c2 = 97; // 使用字符的ASCII码值复制 
 // %c : 输出打印的就是字符  %d:输出打印的是字符的ASCII码值
 printf("c1 = %c, c1 ascii = %d\n", c1, c1);
 printf("c2 = %c, c2 ascii = %d\n", c2, c2);

 
 // 将字符变量c中存储的小写字符a,转换为大写字符A
 char c = 'z'; // char c = 122;
 printf("小写字符转换为大写字符 :%c\n", c - 32);
 printf("小写字符转换为大写字符 :%c\n", c - ('a' - 'A'));
 
 return 0;
}

4. 字符串常量

字符串常量需要使用双引号括起来,字符串的结尾有一个尾'\0'字符,
	'\0'字符的ascii码值为0.
	
	对于字符串可以使用字符数组进行存储,或者使用字符指针指向字符串常量。
	
	字符串的举例:
		"A"		"hello"   "world"  "www.baidu.com"  "zhangsan"
	
	对于字符串分配内存空间的大小为"字符串长度+1".
	
	字符串本身也是又一个一个字符构成,因此在内存中存储的是每个字符的ASCII码值。

在这里插入图片描述

例如:
#include <stdio.h>

int main(int argc, const char *argv[])
{
 // 1. 直接使用printf打印字符串
 printf("%s\n", "hello world");  // %s :字符串的格式化字符
 
 // printf函数遇到'\0'字符之后,字符串打印结束
 printf("%s\n", "hello\0world");  // 打印hello之后就结束,有一个'\0'
 
 // 2. 可以使用字符数字存储字符串
 char c_arr[6] = "hello";
 printf("c_arr = %s\n", c_arr);

 // 3. 使用字符指针指向字符串
 char *c_p = "world";
 printf("c_p = %s\n", c_p);
 
 return 0;
}

字符常量/字符串常量总结
	1> 字符常量的书写方式,使用单引号
	2> 字符串常量的书写方式,使用双引号,字符串结尾有'\0'字符
	3> 字符常量和字符串常量在内存中存储的都是字符的ASCII码值
	4> 使用字符类型的变量存储字符,使用字符数组存储字符串和字符指针指向字符串。

5. 标识常量(宏定义)

格式:
	#define   宏定义名   宏定义值1> 宏定义名字一般大写
	2> 宏定义在预处理阶段展开,傻瓜式替换
	3> 宏定义的结尾不可以有分号
	4> 宏定义一般只写一行,如果写多行需要使用续行符  "\"
#include <stdio.h>

// 宏定义在main函数的上边定义
#define    NUMBER    100
#define    CH  'A'
#define    STR      "hello world"
#define    PI		3.1415

int main(int argc, const char *argv[])
{
 // NUMBER宏定义在预处理阶段被替换为10
 printf("NUMBER = %d\n", NUMBER);
 printf("CH = %c\n", CH);
 printf("STR = %s\n", STR);
 printf("PI = %lf\n", PI);
 return 0;
}

预处理阶段替换之后的结果:

729 int main(int argc, const char *argv[])
730 {
731 
732  printf("NUMBER = %d\n", 100);
733  printf("CH = %c\n", 'A');
734  printf("STR = %s\n", "hello world");
735  printf("PI = %lf\n", 3.1415);
736  return 0;
737 }

#include <stdio.h>
// 宏定义的结尾不可以有分号,错误的,分号也会当初宏定义的值进行替换
// #define  MAX_VALUE   100;

// 宏定义的值分多行书写时,需要使用续行符 “\”
#define  PRINT		printf("hello ");  \
    printf("world\n")

// 宏定义中也可以写一个算数表达式,优先进行算数运行时,最好使用()提升运算的优先级
#define   SUM     100 + 200
#define   SUM1     (100 + 200)

int main(int argc, const char *argv[])
{
//	printf("%d\n", MAX_VALUE); 
 
 PRINT;

 printf("%d\n", SUM);  // 300
 
 // 预处理展开结果:printf("%d\n", 2 * 100 + 200)
 printf("%d\n", 2 * SUM); // 400

 // 预处理展开结果 : printf("%d\n", 2 * (100 + 200));
 printf("%d\n", 2 * SUM1);   // 600

 return 0;
}

宏定义替换之后的结果:
# 13 "07define.c"
int main(int argc, const char *argv[])
{


 printf("hello "); printf("world\n");

 printf("%d\n", 100 + 200);


 printf("%d\n", 2 * 100 + 200);


 printf("%d\n", 2 * (100 + 200));

 return 0;
}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值