💭一 ,让我们看第一个C语言代码
#include <stdio.h> int main() { printf("hello world\n"); printf("hello,c语言\n"); return 0; }
切记main函数为程序的入口,一个工程中main函数只能有一个,从main函数进入后,完成内部操作,直到最后返回零,结束该程序的运行。
💭二 ,数据类型
📖1,基本类型
📜基本类型就是c语言中的基础类型,包括整型,字符型,浮点型,枚举类型,今天我们就谈谈c语言的基本类型其详细介绍及如何应用。
char //字符数据类型 short // int //整型 long //长整型 long long //更长的整型 float //单精度浮点型 double //双精度浮点型
💬为什么会出现这么多类型呢?每种类型的大小(单位是字节)是多少呢?
💬我们可以通过sizeof函数来探寻
#include <stdio.h> int main() { printf("%d\n", sizeof(char)); //1 printf("%d\n", sizeof(short)); //2 printf("%d\n", sizeof(int)); //4 printf("%d\n", sizeof(long)); //4 printf("%d\n", sizeof(long long)); //8 printf("%d\n", sizeof(float)); //4 printf("%d\n", sizeof(double)); //8 return 0; }
每种不同类型的类型占用不同的字节,有了这么多变量,我们可以更加生动地表示生活中的各种数值。
📝2.定义变量的方法
变量类型加变量名!
例如
🏅Int age = 150;
🏅float weight = 45.5f;💡这里f可以不加,只是表示weight s是float 类型的变量
🏅char ch = 'w';
📝3.变量的命名
🌲①只能由字母(包括大写和小写),数字和下划线(_)组成
🌲②不能以数字开头
🌲③长度不能超过63个字符
🌲④变量名中区分大小写
🌲⑤变量名不能使用关键字
📖一,字符型变量
字符型变量是用来存储字符常量的变量,将一个字符常量储存在字符变量中,其实是将该字符的ASCLL码值储存到内存单元中。
字符类型在内存空间中占用一个字节,取值范围是-128~127.
💬说明
字符数据在内存中存储的是字符的ASCLL码值,是一个无符号整数,其形式与整型的储存形式一样,因此C语言允许字符型数据与整形数据之间通用。
✅举一个例子
#include <stdio.h> int main() { char Char1; char Char2; Char1 = 'a'; Char2 = 97; printf("%c\n", Char1); //输出结果为a printf("%c\n", Char2); //输出结果为a return 0; }
💡定义两个字符类型变量,为两个变量赋值时,一个赋值为 'a',一个赋值为97,在用%c(%c打印字符常量)打印时,输出结果都为'a'。说明字符型数据和整型数据之间是通用的。
📖二,整型常量
💡因为上边char类型储存的也是整型数据,所以偶尔也可把char类型看作整形,如同他的名字,整型变量是用来存储整型数值的变量,其基本类型是Int,在此基础上加上一些符号进行修饰,例如short或long等。
1,有符号基本整型
有符号基本整型是指signed int 型,编写时通常将signed省略,有符号整型在内存中占4个字节,取值范围是-2147483648~2147483647.
注意:在编写程序时,所有用到的变量的定义应该在变量的赋值之前,否则就会产生错误。
2,无符号基本整形
关键字是unsigned int,即无符号的意思,在内存中也是占4个字节,取值范围是0~4294967295.
3,有符号短整型
有符号短整型的关键字是signed short int,在编写时signed和int都可以省略,直接写为short,他在内存中所占的字节是两个字节,取值范围是-32768~32767.
4,无符号短整型
无符号短整型的关键字是unsigned short int,在编写时int可以省略,写为unsigned short,他在内存中所占的字节是两个字节,取值范围是0~65535.
5,有符号长整型
有符号短整型的关键字是signed long int,在编写时signed和int都可以省略,直接写为long,他在内存中所占的字节是4个字节,取值范围是-2147483648~2147483647.
6,无符号长整型
无符号长整型的关键字是unsigned long int,其中关键字int可以省略,无符号长整型在内存中占4个字节,取值范围是0~4294967295.
📖三,浮点型变量
浮点型变量也称为实型变量,浮点型变量是由整数和小数两部分组成的,根据其精度分为单精度类型,双精度类型和长双精度类型。
📘1,单精度类型
🐲单精度类型的关键字是float,他在内存中占4个字节,取值范围是-3.4*10^-38~3.4*10^38.
这里举一个例子,定义一个单精度类型变量,为其赋值为2.34
int main() { float x = 0; x = 2.34; printf("%f\n", x); return 0; }//输出结果为2.340000
🐲这里输出结果为2.340000,我们如何只保留两位小数呢,只需要在 f 前加上 .2即可,即printf("%.2f\n",x); 即可,更改代码后发现输出结果确实为2.34 。
📘2,双精度浮点型
双精度浮点型的关键字是double,他在内存中占8个字节,取值范围是-1.7*10^108~1.7*10^38.
📘 3,长双精度浮点型
🐞长双精度浮点型的关键字是 long double,他在内存中也占8个字节,取值范围与double一样,区别在于
🔥1 double类型为C++原始类型,所有 编译器 均支持,而long double是C99规范增加的新类型,只有支持C99的编译器才支持long double;
🔥2 占用大小不同,double占8个字节,long double根据编译器实现不同,有占用8,10,12字节和16字节四种; 在long double用8字节实现时,long double 和double没有其它区别。
📜 接下来又是一大模块,来讲一讲所谓变量的储存类别
👉 📖问题引入:在程序运行中我们经常使用到变量,在程序中可以选择不同储存形式,分为静态存储和动态存储,可通过储存类型修饰符告诉编译器需要储存什么样的类型变量,具体有auto(自动(通常省略)),静态(static),寄存器(register)和外部(extern)。
静态存储和动态存储的区别
✅根据变量的产生 时间 区分,静态存储是指程序运行时为其分配固定的存储空间,动态存储则是该程序运行期间根据需要动态的分配空间。
void ADD() { int j = 0; printf("%d", j); j = j+1; } int main() { int i = 0; for (i = 0; i < 9; i++) { ADD(); } return 0; }
💡 思路 :我们想打印从0开始,打印一次加1,然而运行代码发现输出结果是九个0;为什么会发生这种情况呢。
📑运行结果分析: j 是一个auto的变量,在程序运行到ADD函数时,创建一个变量 j 为0,打印0之后加1变成1,然而出了ADD函数,这个变量 j 就销毁了,再次进入后,重新生成一个 j ,其值仍然为零,所以打印的仍然是零。这就是动态变量。
static变量
static变量,static变量在修饰不同类型变量以及修饰函数等有不同的作用,这里我们就讲一讲static修饰局部变量会发生什么。
static变量和auto变量是相对而言的,尽管两者作用域都仅限于声明变量的函数中,但在执行期间,stasic变量将保持它的值,且初始化只在第一次具有作用,多说无益,直接上代码,看一看static和auto如何是相对的
💬 代码演示:
void ADD() { static int j = 0; printf("%d", j); j = j+1; } int main() { int i = 0; for (i = 0; i < 9; i++) { ADD(); } return 0; }
📑运行结果:这里与上面代码不同的就是在ADD函数中将 j 的变量前加了一个static。此时运行的结果就变为0 1 2 3 4 5 6 7 8.
📜分析:这次出ADD函数后,变量 J 没有销毁,所以才会保持上一次运行后的值,然后依次加上一。
register变量
⭐register变量称为寄存器储存类型,通过register变量,程序员可以将某个 局部变量指定存放在寄存器中,而不是储存在内存中,这样可以提高程序的运行速度。然而这只是程序员的主观意愿,实际上编辑器可以忽略register对变量的修饰,
extern变量
⭐extern变量称为外部储存变量,extern声明了将要使用但并没有定义的外部变量。
通俗来讲,一个工程通常是由多文件组成的,这些源代码文件会分别编译,然后链接成一个可执行代码模块。
这样说着可能不太清晰,我们.......
💬 代码演示:
👑说到这里,本篇文章就结束啦,欢迎大家讨论留言哦!👑
😘支持作者的友友可以一键三连哦!😘
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️