C语言入门篇–函数及数组用法

C语言入门篇--函数及数组用法

函数

函数是一段执行特定任务的独立代码块,可以被程序中其他部分调用。它使程序流程变得更易于阅读和理解。函数有返回值和不返回值两种类型。

定义函数

函数定义的一般形式如下:

返回值类型 函数名(形式参数列表)
{
   函数体
}

其中,

  • 返回值类型:函数返回值的类型,可以为任意类型。
  • 函数名:函数的名称,它是唯一的。
  • 形式参数列表:传入函数中的参数列表,可以为空。参数列表在圆括号中用逗号分隔。
  • 函数体:函数执行的语句块,在花括号中。

下面是一个例子,该函数用于计算两个数的和:

#include <stdio.h>

// 函数声明
int add(int a, int b);

// 主函数
int main()
{
    int a = 10;
    int b = 20;
    int result = 0;

    // 调用函数
    result = add(a, b);

    printf("a + b = %d\n", result);

    return 0;
}

// 函数定义
int add(int a, int b)
{
   int result = 0;

   result = a + b;

   return result;
}

函数参数

函数参数可以是任何类型,包括基本类型(int、float等)、指针、结构体等等。

传值调用

当把参数按值传递给函数时,函数接收到的是变量的副本,函数中修改参数的值不会影响传入函数的变量的值。下面是一个例子:

#include <stdio.h>

void change_value(int x);

int main()
{
    int a = 10;

    printf("Before function call, a = %d\n", a);

    // 调用函数
    change_value(a);

    printf("After function call, a = %d\n", a);

    return 0;
}

void change_value(int x)
{
    x = 20;
}

输出结果为:

Before function call, a = 10
After function call, a = 10

传址调用

当把指针传递给函数时,函数接收到的是指向变量实际地址的指针,函数中修改指针指向的变量的值会影响传入函数的变量的值。下面是一个例子:

#include <stdio.h>

void change_value(int *x);

int main()
{
    int a = 10;

    printf("Before function call, a = %d\n", a);

    // 调用函数
    change_value(&a);

    printf("After function call, a = %d\n", a);

    return 0;
}

void change_value(int *x)
{
    *x = 20;
}

输出结果为:

Before function call, a = 10
After function call, a = 20

数组

数组是由元素组成的集合,它的每个元素都具有相同的数据类型。数组可以是一维的、二维的、三维的等等,每一维都有自己的大小。

定义数组

声明一个数组,需要指定元素的类型和数组的大小,如下所示:

int arr[10];

上述代码声明了一个包含10个int类型元素的数组arr。

初始化数组

数组初始化指定元素的值。可以在定义数组时对其进行初始化,或者使用赋值语句对其进行初始化。

静态初始化

静态初始化在定义数组时给出初始值,如下所示:

int arr[2] = {1, 2};

上述代码定义了一个包含2个int类型元素的数组arr,并给它们的初始值分别为1和2。

动态初始化

动态初始化是在定义完数组之后,再对每一个元素进行赋值。如下所示:

int arr[2];
arr[0] = 1;
arr[1] = 2;

上述代码定义了一个包含2个int类型元素的数组arr,并分别对它们进行赋值。

多维数组

多维数组是由一位或多维数组组成的数组。二维数组是最常用的多维数组,常用来表示表或矩阵。在定义多维数组时,需要指定每一维的大小,如下所示:

int arr[3][4];

上述代码声明了一个包含3行4列的二维数组arr。

遍历数组

可以使用for循环语句遍历数组中的元素,如下所示:

#include <stdio.h>

int main()
{
   int arr[3] = {1, 2, 3};
   int i = 0;

   for (i = 0; i < 3; i++)
   {
      printf("%d\n", arr[i]);
   }

   return 0;
}

上述代码输出数组arr中的所有元素。

又如下所示,遍历二维数组:

#include <stdio.h>

int main()
{
   int arr[3][4] = {
      {0, 1, 2, 3}, 
      {4, 5, 6, 7}, 
      {8, 9, 10, 11}
   };
   int i = 0, j = 0;

   for (i = 0; i < 3; i++)
   {
      for (j = 0; j < 4; j++)
      {
         printf("%d ", arr[i][j]);
      }
      printf("\n");
   }

   return 0;
}

上述代码输出二维数组中的所有元素。

示例说明

示例一:函数

下面是一个示例,该函数用于计算两个数的差:

#include <stdio.h>

// 函数声明
int subtract(int a, int b);

// 主函数
int main()
{
    int a = 10;
    int b = 20;
    int result = 0;

    // 调用函数
    result = subtract(a, b);

    printf("a - b = %d\n", result);

    return 0;
}

// 函数定义
int subtract(int a, int b)
{
   int result = 0;

   result = a - b;

   return result;
}

输出结果为:

a - b = -10

示例二:数组

下面是一个示例,该程序对一个一维数组进行排序:

#include <stdio.h>

int main()
{
    int arr[] = {5, 4, 8, 3, 9, 1, 6, 2, 7};
    int i = 0, j = 0, temp = 0;

    // 冒泡排序
    for (i = 0; i < 9; i++)
    {
        for (j = 0; j < 9 - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    // 输出排序后的数组
    for (i = 0; i < 9; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

输出结果为:

1 2 3 4 5 6 7 8 9

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言入门篇–函数及数组用法 - Python技术站

(0)
上一篇 2023年6月20日
下一篇 2023年6月20日

相关文章

  • 建模算法(十)——灰色理论之关联度分析

    灰色理论之关联度分析 灰色理论是一种基于不完全信息的数学方法,可以用于处理具有不确定性和不完整性的问题。关联度分析是灰色理论的一种应用,用于分析变量之间的关联程度。 灰色关联度分析的基本原理 灰色关联度分析的基本原理是将多个变量的数据序列转化为灰色数列,然后计算它们之间的关联度。灰色数列是一种特殊的数列,它由原始数据序列经过灰色预测模型处理得到。 灰色预测模…

    other 2023年5月5日
    00
  • 31. Ubuntu15.04系统中如何启用、禁用客人会话

    Ubuntu15.04系统中如何启用、禁用客人会话的完整攻略 本文将为您提供Ubuntu15.04系统中如何启用、禁用客人会话的完整攻略,包括介绍、方法和两个示例说明。 介绍 Ubuntu是一款自由和开放源代码的Linux操作系统,广泛应用于个人电脑和服务器。Ubuntu15.04系统中提供了客人会话功能,可以让用户在不登录系统的情况下使用计算机。本文将介绍…

    other 2023年5月6日
    00
  • Android编程设计模式之模板方法模式详解

    Android编程设计模式之模板方法模式详解 什么是模板方法模式? 模板方法模式是一种行为型设计模式,它定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法的结构下,重定义算法的某些步骤。 模板方法模式的实现方式 在 Android 中,模板方法模式实现方式分为两类:基于抽象类的模板方法模式和基于接口的模板方法模式。 基于抽象类的模…

    other 2023年6月27日
    00
  • windows使用docker运行mysql等工具(一)windows安装docker

    Windows使用Docker运行MySQL等工具(一)Windows安装Docker 作为一种开源的容器化平台,Docker最初是为Linux系统设计的,但随着它的发展,它的支持已经扩展到了Windows和MacOS系统。在Windows操作系统上安装和使用Docker可以帮助我们更加便捷、快速地搭建各种环境,包括MySQL数据库等常用工具。 为什么要使用…

    其他 2023年3月29日
    00
  • C++中stringstream的用法和实例

    当需要将C++中的数据转换成字符串,或者需要将字符串转换成其他数据类型的时候,可以使用stringstream类。该类可以将字符序列转换成其他数据类型,例如整数、浮点数或者字符。其基本用法如下: 引入头文件 # include <sstream> 定义字符串流对象 std::stringstream ss; 将数据转换成字符串 int num =…

    other 2023年6月26日
    00
  • 深入uCOS中全局变量的使用详解

    深入uCOS中全局变量的使用详解 什么是uCOS中的全局变量? 在uCOS操作系统中,有许多全局变量。它们存储在操作系统的静态存储区域中,对于整个系统而言都是可见的。其中一些全局变量用于保存ucOS的内部状态信息,而另一些则可以由用户自由使用。 全局变量的使用方法 在uCOS系统中,使用全局变量非常简单。要声明一个全局变量,只需在定义该变量的地方使用关键字e…

    other 2023年6月26日
    00
  • Python基于socket实现TCP客户端和服务端

    以下是“Python基于socket实现TCP客户端和服务端”的完整攻略: 什么是Socket以及TCP/IP协议? Socket:Socket是通信两端建立连接所用的一个对象,可以用来发送和接收数据。 TCP/IP协议:TCP/IP协议是Internet网络协议的基础,它定义了数据如何从一个计算机传输到另一个计算机,并规定了各种服务的标准规范。 Pytho…

    other 2023年6月27日
    00
  • C语言数据结构系列篇二叉树的概念及满二叉树与完全二叉树

    C语言数据结构系列篇:二叉树的概念及满二叉树与完全二叉树 一、二叉树的概念 二叉树是一种特殊的树型结构,它的每个节点最多有两个子节点,称为左子节点和右子节点。二叉树可以为空树,也可以是非空树。二叉树的每个节点保存着某种数据,可以是整数、浮点数、字符串等。 下图是一个简单的二叉树示例: 1 / \ 2 3 / \ 4 5 其中,数字表示节点保存的数据。根节点是…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部