C语言的数据类型
代码是用来解决实际生活中的问题的,C语言提供多种数据类型来适应现实当中的情况
类型 | 含义 | 字节大小 |
char | 字符数据类型 | 1 |
short | 短整型数据类型 | 2 |
int | 整形数据类型 | 4 |
long | 长整型数据类型 | 4 |
long long | 更长整形数据类型 | 8 |
float | 单精度浮点数 | 4 |
double | 双精度浮点数 | 8 |
SIZEOF()关键字
sizeof()返回的是一个数值或数组在内存中所占字节的大小,size返回的参数表示的是占用的字节 。
#define _CRC_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
// 除了以上的打印方式之外还可以使用zu的方式进行打印,zu的含义是打印一个sizeof返回的无符号整形
printf("\n");
printf("%zu\n", sizeof(char));
printf("%zu\n", sizeof(short));
printf("%zu\n", sizeof(int));
printf("%zu\n", sizeof(long));
printf("%zu\n", sizeof(long long));
printf("%zu\n", sizeof(float));
printf("%zu\n", sizeof(double));
printf("%zu\n", 100);
return 0;
}
C语言数据类型换算
类型的使用:类型的本质是用来创建变量的,创建变量的本质是向内存申请空间
变量和常量的概念
变量
生活中有一些值是可以改变的,一些值是不能改变的,不可以改变的值C语言中使用常量的概念进行表示,可以改变的值C语言使用变量来表示。
变量的定义
#define _CRC_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
short age = 24; // 年龄
int high = 180; // 升高
int weigh = 88.5; // 体重
return 0;
}
变量的分类:局部变量和全局变量
局部变量 - 在大括号内部定义的变量叫局部变量
全局变量 - 在大括号外部定义的变量叫全局变量
变量的定义和使用
1:局部变量之间的名称值不能相同的,会出现重定义错误
2:全局变量和局部变量的名称可以相同函数在调用的过程中优先使用局部变量
3: 建议不要将全局和局部变量的名字写成一样
【demo写一个代码计算两个整数的和】
以上程序的运行结果
注:
1:变量定义的时候最好赋值一个默认值,如果在变量初始化的时候,不给变量赋值,那么编译器会给变量赋值一个随机的值
“习惯在创建的时候赋值给一个初始值,有利于更好 的掌控代码”。
2: scanf 获取用户键盘输入,它是一个输入函数,printf是一个输出函数
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ADD(x,y) ((x) + (y))
int main() {
int input1 = 0;
int input2 = 0;
// 输入两个数
scanf("%d %d",&input1,&input2);
// 求和
int sum = input1 + input2;
// 输出
printf("sum = %d\n", sum);
return 0;
}
注:在c语言中使用scanf函数需要再源文件的第一行将以下这行代码加上,如果在VS中使用scanf需要加上下面的这行代码,其他编译器不会出现这个错误,这个错误只在VS编译器中出现。
#define _CRT_SECURE_NO_WARNINGS
使用VS编译器时scanf_s 这个函数是VS编译器自己提供的函数,非标准C提供的函数,也就是只有VS编译器任务,其他的编译器不认识,建议使用scanf函数,如果非要使用scanf_s 研究一下再使用。
配置VS编译器
配置VS编译器,让VS的编译器自动添加上 #define _CRT_SECURE_NO_WARNINGS
在VS的安装路径下有一个文件:在VS工程中创建新的.C或者cpp访问文件的时候都是拷贝NEWC++FILE.cpp这个文件!
在本人电脑上的路径是:
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCProjectItems
可以使用notepad++打开这个文件,然后给管理员的权限,在这个文件中添加 #define _CRT_SECURE_NO_WARNINGS 这一行代码
第二种方法:建议使用复制到桌面的方式,修改完成后复制进去,不要直接拖出来,不拖回去的话就会出现问题 。
变量的作用域和生命周期
作用域:
1:作用域是程序设计的概念,通常来说,一段程序代码中所使用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
2:局部变量的作用域是变量所在的局部范围
3:全局变量的作用域是整个工程(程序销毁后全局变量才销毁)
以下这个程序变量a的作用范围,也就是作用域在括号内有效出了这个括号是无法打印出第二个a的值的这个时候编译器在编译程序的时候会报错。
int main() {
{
int a = 10;
printf("a = %d\n",a);
}
printf("a = %d\n", a);
return 0;
}
改变变量的作用域,将int a 的定义放到main函数中后程序编译正常,正常的打印输出第二个a
int main() {
int a = 10;
{
printf("a = %d\n",a);
}
printf("a = %d\n", a);
return 0;
}
全局变量的作用域【整个工程】
#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// 全局变量
int a = 10;
void test() {
printf("test-----> %d\n", a);
}
int main() {
test();
{
printf("a = %d\n",a);
}
printf("a = %d\n", a);
return 0;
}
程序的运行结果
extern 用于声明外部变量的关键字
变量的生命周期
1:局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束
2:全局变量的生命周期:全局变量在程序的生命周期中都存在 ,全局变量的生命周期等于程序的生命周期
常量
常量就是描述其值不能改变的量
C语言中的常量分为以下的几种
- 1: 字面常量
- 2:const 修饰的常变量
- 3:#define 定义的标识符常量
- 4:枚举常量
【字面常量】
C语言中的字面常量(Literal Constants)指的是直接在源代码中以固定值的形式出现的数据,这些值在程序编译时就已经确定,并且在程序运行期间不会改变。字面常量可以直接用于表达式、赋值给变量或作为函数参数等。它们代表了程序中基本数据类型的特定实例。C语言中的字面常量主要可以分为以下几类:
-
整数常量(Integer Literals): 可以是十进制、八进制(前缀0),或十六进制(前缀0x或0X)形式表示的数值。例如:
123
,075
,0x4A
。 -
浮点数常量(Floating-Point Literals): 表示小数,可以是普通形式(如
3.14
)或科学记数法(如3e-2
,表示0.03)。 -
字符常量(Character Literals): 单个字符,由单引号包围,如
'a'
。字符常量在内存中存储为其对应的ASCII码值。 -
字符串字面量(String Literals): 一系列字符,由双引号包围,如
"Hello, World!"
。注意,尽管看起来像字符数组,字符串字面量在C中实际上是字符数组的首地址,即指针常量。 -
转义序列(Escape Sequences): 在字符或字符串中使用反斜杠
\
后跟特定字符来表示特殊字符或控制字符,如\n
表示换行,\t
表示制表符。
【const修饰的常变量】
在C语言中const修饰的a本质上是变量,但是不能被修改,有常量的属性
在这个位置数组里面的值一定要是常量,尽管int n 有const修饰拥有常量的属性,但是n 本质上是一个变量,并不是真正的常量。
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
int main() {
const int n = 10;
int arr[n] = { 0 };
return 0;
}
第三种常量#define 定义的标识符常量
注: “标识符常量是不能被修改的”
枚举常量:枚举的关键字enum
// 定义了一个枚举常量表示未来的可能取值
enum Color {
RED,
GREEN,
BLUE
};
创建一个确定的集合,里面有一些确定的元素
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
// 定义了一个枚举常量表示未来的可能取值
enum Color {
RED,
GREEN,
BLUE
};
int main() {
int num = 10;
enum Color c = RED;
enum Color c = GREEN;
enum Color c = BLUE;
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
// 定义了一个枚举常量表示未来的可能取值
enum Color {
RED,
GREEN,
BLUE
};
// 性别的取值
enum Sex {
MALE,
FEMALE,
SECRET
};
int main() {
int num = 10;
enum Color c = RED;
RED = 10;
enum Color c = GREEN;
enum Color c = BLUE;
return 0;
}
常量是其值无法改变的量,一些值是无法改变的使用常量的值进行描述,一些值是可以改变的使用变量进行表示。
.......