C语言学习:函数、整型数组作为函数参数与一二维字符型数组作为函数参数

函数的基本构成

每个C语言函数都包含三个主要部分:

  1. 返回值类型:指定函数执行完毕后返回什么类型的结果
  2. 函数名:表明函数的功能,需符合标识符命名规则
  3. 参数列表:接收传递给函数的数据

基本语法格式如下:

返回值类型 函数名(形式参数)
{
    // 函数体
    声明部分
    语句部分
}

函数的工作流程

函数的工作流程可以概括为:输入 -> 处理 -> 输出。这个过程中:

  • 输入通过参数实现
  • 处理在函数体中完成
  • 输出通过return语句返回

函数参数深入理解

形参与实参

函数参数分为形式参数(形参)和实际参数(实参):

  • 形参出现在函数定义中,用于接收传入的数据
  • 实参是函数调用时实际传入的数据
  • 形参和实参必须一一对应(个数相同,类型匹配,顺序一致)

数组作为函数参数

当数组作为函数参数时,有几个重要的特点:

  1. 一维数组参数写法:
void printArray(int arr[]) 
  1. 二维数组参数写法:
void print2DArray(int arr[][10], int rows) // 必须指定列数

函数的返回值

关于函数返回值,有几点需要特别注意:

  1. 如果函数不需要返回值,可以将返回类型声明为void
  2. 如果没有指定返回类型,默认为int
  3. 返回值类型必须与函数声明的返回类型匹配

实用函数示例

1. 查找数组最大值

int maxOfArray(int arr[], int len) 
{
    int max = arr[0];
    for(int i = 1; i < len; i++) 
    {
        if(arr[i] > max) 
        {
            max = arr[i];
        }
    }
    return max;
}

2. 数组逆序

void reverseArray(int arr[], int len) 
{
    int left = 0, right = len - 1;
    while(left < right) 
    {
        int temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left++;
        right--;
    }
}

函数调用的三种方式

  1. 函数调用语句:
add(a, b);
  1. 函数调用表达式:
result = add(a, b) + 3;
  1. 作为其他函数的参数:
printf("result = %d\n", add(1, 2));

C语言字符数组作为函数参数

一维字符数组作为函数参数

字符数组作为函数参数时有个重要特点:由于字符串末尾有'\0'作为结束标志,我们往往不需要传递数组长度参数。这一点与整型数组有很大区别。

基本语法

// 形参写法
void processString(char str[])  
{
    // 函数体
}

常用字符串处理函数示例

  1. 计算字符串长度:
int Strlen(char str[]) 
{
    int len = 0;
    while(str[len] != '\0') 
    {
        len++;
    }
    return len;
}
  1. 字符串复制:
void Strcpy(char dest[], char src[]) 
{
    int i = 0;
    while(src[i] != '\0') 
    {
        dest[i] = src[i];
        i++;
    }
    dest[i] = '\0';  // 最后复制结束符
}
  1. 字符串连接:
void Strcat(char dest[], char src[]) 
{
    int i = 0;
    // 找到目标字符串的末尾
    while(dest[i] != '\0') 
    {
        i++;
    }
    // 将源字符串接到末尾
    int j = 0;
    while(src[j] != '\0') 
    {
        dest[i] = src[j];
        i++;
        j++;
    }
    dest[i] = '\0';  // 添加结束符
}

二维字符数组作为函数参数

基本语法

// 形参写法
void process2DString(char str[][10], int rows)  // 必须指定列数
{
    // 函数体
}

示例

字符串数组排序(按字典序):

void sortStrings(char strs[][10], int rows) 
{
    for(int i = 0; i < rows-1; i++) 
    {
        for(int j = 0; j < rows-1-i; j++) 
        {
            if(strcmp(strs[j], strs[j+1]) > 0) 
            {
                // 交换两个字符串
                char temp[10];
                strcpy(temp, strs[j]);
                strcpy(strs[j], strs[j+1]);
                strcpy(strs[j+1], temp);
            }
        }
    }
}

你可能感兴趣的:(Linux编程,嵌入式,学习日记,c语言,学习,开发语言)