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

[复制链接]
发表于 2025-12-26 04:12:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
        Hello各人好,很高兴我们又见面了!
        给生存添点passion,开始本日的编程之路!
        这一篇我们来增补一下在之前篇目没讲到的知识,并联合一些码友的私信提问和我在编程中碰到的题目,做一些易错点或易混点的讲授。
1、储存期

        在许多书上,对于储存器的讲授都非常啰嗦,这里我只管用最简短的话,带各人搞清楚这个东西
        起首,什么是储存期?这里我们把变量都想象成有生命的,变量的生命期就叫储存期。
接下来我们看这两个概念:
(1)主动储存期

        在函数中不利用static而界说出的变量,被赋予了主动储存期:在界说是赋予他生命,在到达该声明步调的末了,也就是大括号}时,该对象消散。
        最常见的就是我们函数里的形参,跳出函数后,形参也随之消散了。
(2)静态储存期

        在函数中利用static而界说出的变量,被赋予了静态储存期:实行main函数之前被创建出来,步调竣事后消散。
        别的,利用auto和register界说的变量具有主动储存期,但是他俩已经很少很少用了,由于他们两个的利用在现在的编译器中险些没故意义。
下面我们来分析一下这串代码:
  1. #include  <stdio.h>
  2. int a = 0;
  3. void test(void)
  4. {
  5.     static int b = 0;
  6.     int c = 0;
  7. }
  8. int main()
  9. {
  10.     int d = 0;
  11.     test;
  12.     return 0;
  13. }
复制代码
        在这串代码中,变量a开始创建,然后进入main函数,创建变量d,接着进入test函数,创建变量b,c,然后出函数,变量c消散,然后return 0竣事步调,变量a,b,d消散。在这个步调中生命期a>d>b>c。
2、指针的初始化题目

        我们先来看这串代码:
  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include  <stdio.h>
  3. int main()
  4. {
  5.     int *p = 5;
  6.     printf("%d\n", p);
  7.     return 0;
  8. }
复制代码
        好我们运行代码,打印出来个5,希奇了我们之前不是说过指针必须指向一个地点吗?你这指向了一个数是怎么回事?能打印出来又是怎么回事?
        起首,指针必须指向地点是没错的。这里能打印是由于编译器的题目,如果你把这串代码放到dev c++中实行,就会发现他根本无法运行!

        这是报错缘故原由:无效整型指针转化为整型。
        如果放到VS2022中,他固然能运行,但我们注意到他会发出一个告诫:

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

        也就是说,我们这种写法本身就是不安全的,只是这次运气比力好,打印的时间vs把指针范例逼迫转化为了int型,以是打印了出来。
总而言之,我想说的是这种写法是不安全的,只管能打印,但是不要如许写!
3、字符函数的运用

        在上期字符函数的讲授时我并没有举例,但是这时间大概有的小搭档就碰到了这个题目:
        比方说我们把1传入isalnum函数,他返回值是0!1是数字,他应该返回为真才对啊!
        着实如许写的码友忽略了一个紧张的点,字符函数我们传入的应该是字符,他判定的应该是这个字符是不是数字!
正确写法:
  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include  <stdio.h>
  3. #include<ctype.h>
  4. int main()
  5. {
  6.     char p = '1';
  7.     int a = isalnum(p);
  8.     printf("%d", a);
  9.     return 0;
  10. }
复制代码
4、EOF

        EOF意为End of file。固然忘了从前出现过没有,但是照旧说一下哈。
        着实在差异编译器中EOF值是不一样的,但常见的就是-1,-2这两个值。
        至于到底怎么用呢?就请各位去编译器中动手实行实行吧!
        好了,本日的内容就分享到这,喜欢的可以订阅我们的专栏:编程之路!感谢各人的支持!
 
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表