一、第一个C语言程序
二、常量与变量
- 1.常量
- 2.变量
三、作用域与生命周期
- 1.局部变量
- a.局部变量的作用域:在函数内部定义的变量
- b.局部变量的生命周期:在其进入作用域生命周期开始,离开作用域后结束
- 2.全局变量
- a.全局变量的作用域:整个工程
- b.全局变量的生命周期:伴随程序结束而结束
四、数据类型
五、字符,转义字符,注释
- 1.strlen:只用于计算字符串长度,遇 '
- 2.转义字符 ' 中止
- 3.注释 只与最近的
一、第一个C语言程序
直接看代码:
其中
#include
main —为主函数,是函数入口 ,有且仅有一个
printf —为库函数,需要引头文件—stdio.h
这是我们学习C语言会接触到的第一个程序,接下来我粗略介绍下c语言中的各个知识点
二、常量与变量 1.常量
c语言中常量分为以下几种:
1.枚举常量
2.字面常量
3.字符常量
4.#define定义的常量
1.局部变量:在函数外部定义的变量
2.全局变量:在函数外部定义的变量
3.const修饰的变量:本质为变量的具有常量性质的量(不可被修改,但仍为变量)
我们用以下的代码来验证:
a.
通过a例子我们发现被const所修饰的A无法被修改
b.
通过b例子我们发现虽然const修饰的A无法被修改,但仍属于变量(数组[]中只能是常量)
三、作用域与生命周期 1.局部变量 a.局部变量的作用域:在函数内部定义的变量 b.局部变量的生命周期:在其进入作用域生命周期开始,离开作用域后结束
当我们在定义a后,再为它打上花括号,我们会发现,printf无法接收到这个a。
那如果我们将printf放在和int a一个花括号里呢
我们发现,程序是可以运行的,所以我们可以得出结论:花括号其实就是局部变量a的作用域,在其离开作用域后a就被释放,所以第一次printf无法打印出a
PS:全局变量与局部变量可以重命名,但在使用时,优先使用局部变量
四、数据类型
1.数据类型的作用是将数据分成所需内存大小不同的数据。
我们常用的数据类型有以下几种:
char — 字符型
short — 短整型
int — 整型
long — 长整型
longlong — 长整型
float — 单精度浮点型
double — 双精度浮点型
那么它们的内存大小分别是多少呢?
我们这就需要引出sizeof来计算他们的大小,看下图:
我们可以看到它们的大小分别为1 2 4 4 8 4 8;那么这些数字的单位是什么呢
那么这里就要涉及到内存大小的单位
在c语言中有两个重要的内存单位,分别为bit和byte
每个bit存储一个二进制个数,如0111 1110 就是8个bit位
每个byte又等于8个bit位,我们上面图中的1 2 4 8 8 4 8 的单位就是byte(字节)
五、字符,转义字符,注释 1.strlen:只用于计算字符串长度,遇 ‘\0’ 中止
我们通过代码来进行说明
我们发现用" "来定义的字符串在其末尾会有’\0’ ,而字符数组则末尾则没有’\0’,那么我们来看看arr1和arr2的strlen各是多少
为什么arr2的strlen是34呢?
原因如下
所以我们发现,arr2在没有’\0’的前提下,它的strlen是个随机值.
那么如果字符数组不加’\0’直接进行打印会有什么影响吗?
预期结果 :abc
实际:
为什么与预期结果不一样呢?
其实原因与strlen打印出来是随机值的原因一样都是未遇’\0’后继续向后访问,若我们指定数组大小大于3,是否也会这样呢?
我们可以看到,若数组大小大于3,那么就会正常打印,为什么数组大于3就会正常打印呢,我们调试下看看原因:
我们发现在数组末尾会自动添加’\0’来中止打印。
从上述两个例子中我们可以看到’\0’对于字符数组来说十分重要。
转义字符故名思义,就是转变原先字符的意思
常见的转义字符表如下:
在这里插入图片描述
/ddd表示八进制数,需要先转换成十进制后再转换为ASCI 码,前提是八进制数转换为十进制后不得大于127(及ASCI码最大值)
我们需要牢记的的转义字符为上述红圈部分
上面提到的’\0’也是转义字符的一个,转义字符大小仅为一个字节
下面我们以例子来求下存在转义字符的字符串的内存大小
从上面两图中我们可以看出 \t与\062 都是转义字符且各仅占一个字节,且在arr数组末尾加上’\0’,所以数组内存大小为8。
注释有两种分别为:
/* */ 这种为c语言风格,具有无法嵌套使用的缺陷
如上图,只能注释前五行,而无法注释后两行;//相结合。
// 这种为c++风格,比较推荐使用这种
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)