深入理解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日

相关文章

  • centos网络配置方法(手动设置,自动获取)

    以下是详细的“CentOS网络配置方法”的攻略。 CentOS网络配置方法 CentOS是一种常用的Linux操作系统,网络配置是使用CentOS时必不可少的部分。这里我们将介绍手动设置和自动获取IP地址的两种方法。 注意:在进行下列操作之前,请确保您具有管理员权限。 手动设置IP地址 1.打开终端,输入下列命令来打开“网络管理器”的图形化界面: nm-co…

    C 2023年5月22日
    00
  • 实例解析iOS应用多线程开发中NSthread类的用法

    实例解析iOS应用多线程开发中NSthread类的用法 简介 在 iOS 应用的多线程开发中,NSthread 是一种常用的线程处理方式。本攻略旨在讲解 iOS 应用中如何使用 NSthread 类,以实现线程处理。在本攻略中,我们将包含以下内容: NSthread 基本用法 线程间通信的实现方法 两个 NSthread 实例示例说明 NSthread 基本…

    C 2023年5月22日
    00
  • Java中空指针异常的几种解决方案

    下面我就给你讲解一下Java中空指针异常的几种解决方案。 1. 什么是空指针异常 空指针异常(NullPointerException)是Java中最常见的运行时异常之一,指的是试图在一个空对象上调用方法或访问属性。通常发生在程序员对一个没有初始化的对象引用调用方法或访问属性时。例如: String str = null; int length = str.…

    C 2023年5月23日
    00
  • C标准库的实现详解

    C标准库的实现详解 简介 assert.h 是 C 标准库中的一个头文件,该头文件包含一个宏 assert() 和一些用于调试的宏定义,它们可以在程序运行中检查和诊断条件是否为真,即程序是否按照预期运行。通常情况下,assert() 用于调试程序,以确保程序的正确性。 assert()宏的使用 assert() 宏用于在程序运行期间检测给定的条件是否为真。如…

    C 2023年5月23日
    00
  • C++详解Primer文本查询程序的实现

    首先,我们要了解Primer文本查询程序的基本思路。该程序能够读取一个文本文件,并且能够响应用户的查询请求,返回文本文件中包含指定单词的所有行。 具体实现方式如下: 读取文本文件 可以使用C++标准库中的fstream库来读取文本文件。通过创建一个fstream对象,并且设置打开文件的方式为ifstream::in,则可以打开文件进行读取。 示例代码如下: …

    C 2023年5月24日
    00
  • Python JSON格式数据的提取和保存的实现

    下面是“Python JSON格式数据的提取和保存的实现”的完整攻略。 JSON格式概述 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON使用Unicode字符集,支持数字、字符串、布尔值、null、数组和对象,具有较高的可读性。 提取JSON数据 在Python…

    C 2023年5月23日
    00
  • Linux C 后台服务程序单进程控制的实现

    实现 Linux C 后台服务程序单进程控制的攻略,主要包括以下几个步骤: 创建守护进程 首先,我们需要编写一个程序,将其作为守护进程来运行。守护进程的作用是在后台运行,独立于用户的终端,并拥有自己的会话和进程组。我们需要遵循以下步骤来创建守护进程: 1)fork 一个子进程。 2)在子进程中调用 setsid 函数创建新会话。 3)再次 fork 一个子进…

    C 2023年5月23日
    00
  • C++实现简易选课系统代码分享

    以下是关于“C++实现简易选课系统代码分享”的完整攻略。 1. 实现思路 选课系统需要维护学生信息和课程信息,同时需要记录每个学生选修的课程。因此,在设计程序时,需要建立以下几个类: 学生类 学生类用于存储学生的基本信息,例如学号、姓名、性别等,同时需要用一个vector容器来存储该学生所选的课程。 课程类 课程类用于存储课程的基本信息,例如课程编号、课程名…

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