Error[8]: Undefined offset: 12, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

文章目录


一、第一个C语言程序

直接看代码:

其中
#include — 包含头文件,stdio为标准输入输出
main —为主函数,是函数入口 ,有且仅有一个
printf —为库函数,需要引头文件—stdio.h
这是我们学习C语言会接触到的第一个程序,接下来我粗略介绍下c语言中的各个知识点


二、常量与变量 1.常量

c语言中常量分为以下几种:
1.枚举常量

2.字面常量

3.字符常量

4.#define定义的常量

2.变量

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

2.全局变量 a.全局变量的作用域:整个工程 b.全局变量的生命周期:伴随程序结束而结束

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’对于字符数组来说十分重要。


2.转义字符

转义字符故名思义,就是转变原先字符的意思
常见的转义字符表如下:
在这里插入图片描述

/ddd表示八进制数,需要先转换成十进制后再转换为ASCI 码,前提是八进制数转换为十进制后不得大于127(及ASCI码最大值)

我们需要牢记的的转义字符为上述红圈部分
上面提到的’\0’也是转义字符的一个,转义字符大小仅为一个字节
下面我们以例子来求下存在转义字符的字符串的内存大小


从上面两图中我们可以看出 \t与\062 都是转义字符且各仅占一个字节,且在arr数组末尾加上’\0’,所以数组内存大小为8。


3.注释

注释有两种分别为:
/* */ 这种为c语言风格,具有无法嵌套使用的缺陷

如上图,只能注释前五行,而无法注释后两行;/[+++]/相结合。


// 这种为c++风格,比较推荐使用这种

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
初始C语言(1)_C_内存溢出

初始C语言(1)

初始C语言(1),第1张

文章目录

  • 一、第一个C语言程序


  • 二、常量与变量

    • 1.常量
    • 2.变量

  • 三、作用域与生命周期

    • 1.局部变量
      • a.局部变量的作用域:在函数内部定义的变量
      • b.局部变量的生命周期:在其进入作用域生命周期开始,离开作用域后结束
    • 2.全局变量
      • a.全局变量的作用域:整个工程
      • b.全局变量的生命周期:伴随程序结束而结束

  • 四、数据类型


  • 五、字符,转义字符,注释

    • 1.strlen:只用于计算字符串长度,遇 '
    • 2.转义字符
    • ' 中止
    • 3.注释
    • 只与最近的


一、第一个C语言程序

直接看代码:

其中
#include — 包含头文件,stdio为标准输入输出
main —为主函数,是函数入口 ,有且仅有一个
printf —为库函数,需要引头文件—stdio.h
这是我们学习C语言会接触到的第一个程序,接下来我粗略介绍下c语言中的各个知识点


二、常量与变量 1.常量

c语言中常量分为以下几种:
1.枚举常量

2.字面常量

3.字符常量

4.#define定义的常量

2.变量

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

2.全局变量 a.全局变量的作用域:整个工程 b.全局变量的生命周期:伴随程序结束而结束

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’对于字符数组来说十分重要。


2.转义字符

转义字符故名思义,就是转变原先字符的意思
常见的转义字符表如下:
在这里插入图片描述

/ddd表示八进制数,需要先转换成十进制后再转换为ASCI 码,前提是八进制数转换为十进制后不得大于127(及ASCI码最大值)

我们需要牢记的的转义字符为上述红圈部分
上面提到的’\0’也是转义字符的一个,转义字符大小仅为一个字节
下面我们以例子来求下存在转义字符的字符串的内存大小


从上面两图中我们可以看出 \t与\062 都是转义字符且各仅占一个字节,且在arr数组末尾加上’\0’,所以数组内存大小为8。


3.注释

注释有两种分别为:
/* */ 这种为c语言风格,具有无法嵌套使用的缺陷

如上图,只能注释前五行,而无法注释后两行;//相结合。


// 这种为c++风格,比较推荐使用这种

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/584755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存