深入理解C语言 static、extern与指针函数

概述

C语言中,static和extern是两个关键字,它们的作用主要与变量和函数的作用域和链接有关。而指针函数则是C语言中比较重要的一个概念,用于返回指针类型数据的函数。本文将从这三个方面进行详细讲解。

static关键字

static是一个非常常用的关键字,在C语言中主要有两个作用:

  1. 改变变量的作用域。当一个变量被定义为static时,它的作用域仅限于所在的源文件中,不会被其他源文件访问到。

  2. 保留变量的值。在函数中使用static定义的变量,在函数调用结束后不会被销毁,而是保留其值,下一次再调用这个函数时会使用上一次的值。

下面是一个使用static定义变量的示例程序:

#include <stdio.h>

int func(void);

int main()
{
    for(int i=0; i<5; i++)
    {
        printf("%d\n", func());
    }

    return 0;
}

int func(void)
{
    static int count = 0;
    count++;
    return count;
}

运行结果:

1
2
3
4
5

extern关键字

extern是另一个常用的关键字,在C语言中主要有两个作用:

  1. 声明一个变量或函数,表明其在其他源文件中定义或实现。

  2. 引用其他源文件中定义的变量和函数。

下面是一个使用extern声明和引用变量的示例程序:

首先,我们定义一个全局变量:

// file1.c

int global_var = 10;

然后,我们在另一个源文件中引用这个变量:

// file2.c

#include <stdio.h>

extern int global_var;

int main()
{
    printf("global_var = %d\n", global_var);
    return 0;
}

我们将这两个文件编译并链接,得到可执行文件:

gcc -c file1.c
gcc -c file2.c
gcc file1.o file2.o -o app

运行结果:

global_var = 10

指针函数

指针函数是一种函数,它返回指针类型的值。C语言中,常用的指针类型有int *、char *等。

下面是一个返回int类型指针的函数示例程序:

#include <stdio.h>

int *max(int *a, int *b);

int main()
{
    int x = 10;
    int y = 20;

    int *p = max(&x, &y);
    printf("max number is %d\n", *p);

    return 0;
}

int *max(int *a, int *b)
{
    if(*a > *b)
    {
        return a;
    }
    else
    {
        return b;
    }
}

这个程序定义了一个返回int类型指针的函数,名为max。max函数接受两个int类型的指针参数,比较这两个指针指向的值的大小,返回指向较大值的指针。在主函数中,我们定义两个整型变量x和y,并调用max函数,将返回指针赋值给int类型指针p,并打印出p指向的值。

运行结果:

max number is 20

总结

本文详细讲解了static、extern和指针函数的概念和用法,并提供了示例程序以加深理解。熟练掌握这些基础知识是程序员入门的重要一步。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解C语言 static、extern与指针函数 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++11的future和promise、parkged_task使用

    C++11的future和promise,以及packaged_task的使用是实现多线程和异步操作的重要方式之一。接下来我将详细讲解这三种机制的用法和特点。 std::future std::future是C++11提供的一个用于异步操作的机制,它允许我们在一个线程中启动一个异步操作,在另一个线程中等待该操作完成,并从操作中获取结果。 下面是一个简单的例子…

    C 2023年5月23日
    00
  • C++超集C++/CLI模块的基本语法

    C++/CLI是一个能够在.NET Framework下,基于C++语言创建托管代码的技术。C++/CLI模块是指一个.dll文件,它包含用C++/CLI语法写的代码,能够被.NET程序引用并利用其中的类、方法等等。 C++/CLI模块的基本语法如下: 命名空间(namespace) C++/CLI和C++一样可以使用命名空间(namespace)来整理代码…

    C 2023年5月22日
    00
  • C++ 函数的介绍

    当我们需要完成一项任务时,我们需要执行一系列的操作,而C++函数可以让我们把这些操作打包成一个代码块,以便需要时可以重复调用,这样可以简化代码的结构,让代码更加易读易维护。接下来,我们将详细讲解C++函数的介绍和使用。 函数的定义 函数定义是指为一个函数声明提供一个实现。在C++中,我们使用关键字”function”来定义一个函数,并且需要指定函数的返回类型…

    C 2023年5月24日
    00
  • C语言实现火车订票系统

    实现火车订票系统的完整攻略分为以下几个步骤: 1. 设计数据库 火车订票系统需要一个数据库来存储车次信息、座位信息、乘客信息等。可以使用MySQL或者SQLite等关系型数据库。设计数据库时需要考虑信息的表结构、字段类型、约束条件等。以下是一个汽车票订购系统的数据库设计: 车次信息表:train_info 字段:train_id, start_station…

    C 2023年5月22日
    00
  • 详解c++良好的编程习惯与编程要点

    详解C++良好的编程习惯与编程要点 C++是一门广泛使用的编程语言,它的语法和特性非常丰富,同时也具有很高的灵活性。但是,如果我们没有遵循一些良好的编程习惯和编程要点,将会使我们的代码难以阅读和维护。下面我们将详细讲解C++良好的编程习惯与编程要点。 1. 命名规范 良好的命名规范是写出易读易懂的代码的关键。我们应该遵循以下命名规范: 变量名和函数名应该是有…

    C 2023年5月22日
    00
  • C语言基于EasyX绘制时钟

    下面是C语言基于EasyX绘制时钟的完整攻略: 准备工作 首先,需要安装EasyX图形库。EasyX是一个图形界面库,可以方便地在Windows平台上进行图形编程。EasyX官网提供了安装包以及一些基本的教程和案例,可以前往 https://easyx.cn/ 下载并安装。 绘制时钟的基本原理 绘制时钟需要用到EasyX封装的一些图形函数,包括绘制圆形、矩形…

    C 2023年5月23日
    00
  • C++实现路口交通灯模拟系统

    C++实现路口交通灯模拟系统完整攻略 介绍 本系统利用C++语言实现,模拟了路口交通灯的控制,包括车辆的停止和通行,交通信号的改变等。系统结构清晰,代码简单易懂,适合初学者学习C++语言的基础和面向对象编程的实现。 设计思路 本系统的设计思路涉及到面向对象编程的基本思想。首先将路口、红绿灯、车辆等实体抽象为类,通过类的成员函数实现对对象的控制。同时,本系统利…

    C 2023年5月23日
    00
  • c++中虚函数的实现详解

    现在我来详细讲解一下 “C++中虚函数的实现详解” 的完整攻略,包含以下内容: 1. 什么是虚函数 虚函数是C++中的一种特殊函数,可以让我们在基类中声明一个方法,在子类中对其进行重新定义,从而实现多态的特性。在实际应用中,我们通常通过将基类指针指向子类对象的方式来调用虚函数。 2. 虚函数的实现 2.1 虚函数表 C++中通过虚函数表(vtable)来实现…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部