首页 > 编程语言 >编程之路,从0开始:知识补充篇

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

时间:2024-11-14 23:16:27浏览次数:3  
标签:知识 函数 补充 编程 int 编译器 main 储存期 变量

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

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

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

1、储存期

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

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

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

(1)自动储存期

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

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

(2)静态储存期

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

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

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

#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、指针的初始化问题

        我们先来看这串代码:

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

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

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

c06667f8b75c449a95e018d5a70c5d9d.png

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

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

083e2368c6db460695e3387a93ee42ff.png

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

182fbc852f7a4e029529e98f78d612cd.png

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

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

3、字符函数的运用

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

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

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

正确写法:

#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这两个值。

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

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

 

标签:知识,函数,补充,编程,int,编译器,main,储存期,变量
From: https://blog.csdn.net/2401_87995839/article/details/143755108

相关文章

  • Shell编程 - 变量篇
    变量1.系统变量在命令行提示符直接执行env、set查看系统或环境变量。env显示用户环境变量,set显示Shell预先定义好的变量以及用户变量。可以通过export导出成用户变量。一些写Shell脚本时常用的系统变量:$SHELL默认Shell$HOME当前用户家目录$IFS内部字段分隔符......
  • 知识管理驱动,打造企业知识中台业务管理新模式
    在数字化时代,知识已成为企业最宝贵的资产之一。如何高效地管理、整合和利用知识资源,成为企业提升竞争力、实现可持续发展的关键。知识管理驱动的企业知识中台业务管理新模式,正是为了应对这一挑战而诞生的。本文将深入探讨知识管理在打造企业知识中台过程中的核心价值、实施路径及......
  • AI知识库驱动:电商供应链智能化优化新策略
    随着人工智能技术的飞速发展,AI知识库在电商供应链中的应用日益广泛,为库存管理、订单处理、物流配送等关键环节带来了智能化改进。AI知识库作为一个集成了海量数据、通过高级算法进行智能分析和处理的信息系统,正在深刻改变电商供应链的运营模式和效率。本文将详细分析AI知识......
  • 智慧管理,知识赋能:精选十款知识库搭建软件解析
    在当今信息化高速发展的时代,知识已成为企业最宝贵的资产之一。高效管理、快速检索与分享知识,不仅能够提升企业竞争力,还能促进团队协作与创新。智慧管理与知识赋能的理念正逐步渗透到企业管理的各个环节,知识库软件作为这一理念的实践工具,扮演着举足轻重的角色。本文将精选十......
  • shell编程 - 基础篇
    1.Shell简介 Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。2.Shell编程语言必知必会shell命令解释器:bash编程常用命令解释器.命令解释器bash目前应用最广......
  • 从数据到知识,知识中台赋能企业智能化升级
    在信息爆炸的时代,企业面临着数据泛滥与知识匮乏的双重挑战。如何将海量的数据转化为有价值的知识,进而驱动企业的智能化升级,已成为企业竞争力的关键。知识中台作为企业数字化转型的核心,正逐渐成为企业智能化升级的新引擎。一、数据与知识的转化数据本身并不等同于知识。数据是原......
  • 深入浅出C#编程语言
    引言随着.NET框架的发展,C#(发音为“CSharp”)已经成为一种非常流行且功能强大的面向对象和类型安全的编程语言。自2002年由微软首次发布以来,C#已经经历了多个版本的迭代,每个新版本都带来了更多的特性和改进。本文旨在为初学者提供一个C#编程语言的基础概述,并探讨其一些核心......
  • C++基础编程(一)
    If语句,条件运算符&&||,运算符优先级,for循环语句,switch语句,continue,break,do,while打印一个锥形1~9矩阵,打印9*9乘法表,For(初始化;条件;每次循环必执行语句)输出abcd....ABCD....0123....输出从1~1000,能被7整除的数While输入一组数,0为结束,计算他们的和......
  • 关于嵌入式硬件设计方面的必备知识!
     成长路上不孤单......
  • 带你一起全面了解关于Python网络爬虫的相关知识点!
     成长路上不孤单......