编程之路,从0开始:知识补充篇

Hello大家好,很高兴我们又见面了!

给生活添点passion,开始今天的编程之路!

这一篇我们来补充一下在之前篇目没讲到的知识,并结合一些码友的私信提问和我在编程中遇到的问题,做一些易错点或易混点的讲解。

1、储存期

在很多书上,对于储存器的讲解都非常啰嗦,这里我尽量用最简短的话,带大家搞清楚这个东西

首先,什么是储存期?这里我们把变量都想象成有生命的,变量的生命期就叫储存期。

接下来我们看这两个概念:

(1)自动储存期

在函数中不使用static而定义出的变量,被赋予了自动储存期:在定义是赋予他生命,在到达该声明程序的结尾,也就是大括号}时,该对象消失。

最常见的就是我们函数里的形参,跳出函数后,形参也随之消散了。

(2)静态储存期

在函数中使用static而定义出的变量,被赋予了静态储存期:执行main函数之前被创建出来,程序结束后消失。

另外,使用auto和register定义的变量具有自动储存期,但是他俩已经很少很少用了,因为他们两个的使用在现在的编译器中几乎没有意义。

下面我们来分析一下这串代码:

cpp 复制代码
#include  <stdio.h>
int a = 0;
void test(void)
{
    static int b = 0;
    int c = 0;
}
int main()
{
    int d = 0;
    test;
    return 0;
}

在这串代码中,变量a最先创建,然后进入main函数,创建变量d,接着进入test函数,创建变量b,c,然后出函数,变量c消失,然后return 0结束程序,变量a,b,d消失。在这个程序中生命期a>d>b>c。

2、指针的初始化问题

我们先来看这串代码:

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include  <stdio.h>
int main()
{
    int *p = 5;
    printf("%d\n", p);
    return 0;
}

好我们运行代码,打印出来个5,奇怪了我们之前不是说过指针必须指向一个地址吗?你这指向了一个数是怎么回事?能打印出来又是怎么回事?

首先,指针必须指向地址是没错的。这里能打印是因为编译器的问题,如果你把这串代码放到dev c++中尝试,就会发现他根本无法运行!

这是报错原因:无效整型指针转化为整型。

如果放到VS2022中,他虽然能运行,但我们注意到他会发出一个警告:

我们可以去网上查询这个报错代码:

也就是说,我们这种写法本身就是不安全的,只是这次运气比较好,打印的时候vs把指针类型强制转化为了int型,所以打印了出来。

总而言之,我想说的是这种写法是不安全的,尽管能打印,但是不要这样写!

3、字符函数的运用

在上期字符函数的讲解时我并没有举例,但是这时候可能有的小伙伴就遇到了这个问题:

比方说我们把1传入isalnum函数,他返回值是0!1是数字,他应该返回为真才对啊!

其实这样写的码友忽略了一个重要的点,字符函数我们传入的应该是字符,他判断的应该是这个字符是不是数字!

正确写法:

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include  <stdio.h>
#include<ctype.h>
int main()
{
    char p = '1';
    int a = isalnum(p);
    printf("%d", a);
    return 0;
}

4、EOF

**EOF意为End of file。**虽然忘了以前出现过没有,但是还是说一下哈。

其实在不同编译器中EOF值是不一样的,但常见的就是-1,-2这两个值。

至于到底怎么用呢?就请各位去编译器中动手尝试尝试吧!

好了,今天的内容就分享到这,喜欢的可以订阅我们的专栏:编程之路!感谢大家的支持!

相关推荐
焦耳加热26 分钟前
阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
人工智能·算法·机器学习·能源·材料工程
wan5555cn33 分钟前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
u6061 小时前
常用排序算法核心知识点梳理
算法·排序
索迪迈科技3 小时前
基于野火F407开发板实现电源管理-停止模式
c语言·stm32·单片机·嵌入式硬件·mcu
蒋星熠3 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
小莞尔3 小时前
【51单片机】【protues仿真】基于51单片机宠物投食系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小欣加油4 小时前
leetcode 面试题01.02判定是否互为字符重排
数据结构·c++·算法·leetcode·职场和发展
3Cloudream4 小时前
LeetCode 003. 无重复字符的最长子串 - 滑动窗口与哈希表详解
算法·leetcode·字符串·双指针·滑动窗口·哈希表·中等
王璐WL4 小时前
【c++】c++第一课:命名空间
数据结构·c++·算法
空白到白4 小时前
机器学习-聚类
人工智能·算法·机器学习·聚类