注:此篇文章仅限初步了解,本小白后续会持续进行详解。
目录:
变量的使用变量的作用域和生命周期常量字符串转义字符注释?结尾
变量的使用
我们通过加法来理解它的使用。
#include<stdio.h>int main(){int num1 = 0;int num2 = 0;//给num1和num2赋予两个新的值scanf("%d %d", &num1, &num2);//求和int sum = num1 + num2;printf("sum = %d\n", sum);return 0;}
?一些简单解释:
1.scanf和printf是库函数,即c语言的编译器提供的现有并可以直接使用的函数函数,在使用这两个库函数时,需要包含头文件<stdio.h>
2.scanf函数的作用:输入数据——将数据从键盘读取到内存中。
printf函数的作用:输出数据——数据从内存输出到屏幕上。
3.
变量的作用域和生命周期
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域.
?简单的来讲,变量哪里可以用,哪里就是它的作用域。
局部变量作用域示意图:
全局变量作用域:
?在任意地方都可以使用!!!
通过两个代码来说明这个问题:
1.一个文件内:
#include<stdio.h>int a = 10;//函数测试void test(){printf("第三个:%d\n", a);}int main(){printf("第一个:%d\n", a);{printf("第二个: %d\n", a);}test();return 0;}
❗️结果如下:
我们可以看到,在一个文件内,全局变量在哪里都可以使用。
多个源文件:
例如:
第1个文件:
int num = 10;
第二个文件:
#include<stdio.h>//声名外部符号。extern int num;int main(){printf("%d\n", num);return 0;}
❗️结果如下:
?通过这两个例子,我们可以看出,全局变量的作用域是整个工程。
正是因为可以在整个工程使用,所以会变得不安全,要尽可能避免使用。
生命周期:变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
局部变量的生命周期示意:
全局变量的生命周期:
main函数的第一行开始运行直到结束,全局变量都可以使用。
?所以:全局变量的生命周期就是整个程序的生命周期。
常量
c语言中的常量有以下几种:
字面常量const 修饰的常变量#define 定义的标识符常量枚举常量? 字面常量:
例如: 整数 1; 小数 1.5; 字符 ’a’ ; 字符串 “abcde”
?const 修饰的常变量:
例:
#include<stdio.h>int main(){int num = 10;printf("%d\n", num);num = 100;printf("%d\n", num);return 0;}
❗️结果:
现在我们将num变量前面加上const 。
例:
#include<stdio.h>int main(){const int num = 10;printf("%d\n", num);num = 100;printf("%d\n", num);return 0;}
❗️结果:无法编译运行。
❓ 原因是什么呢❓
?const 修饰的变量使得变量具有了常属性——不可被改变! 但是,这个本质上还是 变量 。
? #define 定义的标识符常量
例:
?在预编译阶段,其实就会将 num 直接替换为10,ch替换为‘a’,num1替换为1.0f
?枚举常量
枚举就是 一个一个列举 。
例如 : 列举性别,列举血型等等。 所以 c 语言引入关键字enum。
enum SEX{//一一列举性别的可能MAX,FEMALE};
此处细节会在后期详细解释!
字符串
字符,简单的来说,键盘上可以敲出来的任何符号都是字符。而字符串,其实就是一串字符。例如:”Hello World“ 。
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
注意:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
例:
int main(){char arr[] = "abcdef";return 0;}
监控一下数组,可以发现有一个\0.
其实这个\0是字符串的结束标志。
用代码解释这个标志:
#include<stdio.h>int main(){char arr1[] = { 'a','b','c','d' };char arr2[] = "abcd";printf("%s\n", arr1);printf("%s\n", arr2);return 0;}
❗️结果如下:
❓对于这种现象如何产生的呢?
而且,在使用strlen(一个库函数,用来计算字符串长度,从给定的地址计数,直到遇到\0才停止)计算字符串长度时,对于上述arr1 的情况,由于无法确定\0的具体位值,所以结果会是随机值。
转义字符
转义字符 | 释义 |
---|---|
\ ? | 在书写连续多个问号时使用,防止他们被解析成三字母词 |
\ ’ | 用于表示字符常量’ |
\“ | 用于表示一个字符串内部的双引号 |
\ \ | 用于表示一个反斜杠,防止它被解释为一个转义序列符。 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | d d d表示1~3个八进制的数字。 如: \130 表示字符X |
\xdd | d d表示2个十六进制数字。 如: \x30 表示字符0 |
一些简单的解释:计算机可以识别二进制,由于字符的不方便储存,所以对字符进行了编号,例如‘a’ —— 97 等等,这种编码就是ASCII 编码,编号就是ASCLL码值。
例如:printf("%c", '\130');
此时130是八进制,转换为十进制是88,对应ASCLL表,可见结果为 X。
注释
代码中有不需要的代码可以直接删除,也可以注释掉?代码中有些代码比较难懂,可以加一下注释文字// 注释
注: 以//开头的注释风格是属于c++的,在c99标准之后,也进行了引入。
/* int a = 0; */
注:这种形式(/* */)是c语言的注释风格。
c语言的注释风格是不可以嵌套的,但是c++的注释风格可以。
?结尾
之后的内容,本小白会持续更新,刚开始写博客,有不足的地方还请各位大佬多多指正,非常感谢!