C语言-基础语法学习-1 函数

本文介绍了在C语言中如何使用函数处理一维和二维数组。对于一维数组,函数参数传递的是数组首地址,通过指针操作,可以修改原数组内容。二维数组同样通过指针传递,需要提供行数和列数以便正确访问。示例代码展示了如何声明、定义和使用这些函数。
摘要由CSDN通过智能技术生成

基础语法学习 - 上官新版C语言

函数

函数 - 一维数组作形参

C语言函数 - 一维数组作形参

当我们需要在C语言中传递一维数组作为函数的形参时,需要了解以下几个关键点:

  • 函数声明和定义:在声明和定义函数时,我们可以使用以下方式指定一维数组作为形参:

    void functionName(dataType arrayName[], int arraySize);
    

    或者

    void functionName(dataType *arrayName, int arraySize);
    

    这两种方式都允许我们传递一个一维数组作为形参。

  • 数组传递:在C语言中,数组传递实际上是通过指针来实现的。当我们传递一维数组作为函数参数时,实际上传递的是数组的首地址(指针),而不是整个数组的内容。这意味着在函数内部对形参进行操作时,实际上是在操作原始数组。

  • 数组长度:在函数中声明一维数组形参时,需要指定数组的长度。这样可以确保函数正确地访问和处理数组元素。

  • 使用数组:在函数内部,我们可以像使用普通的一维数组一样使用传递进来的一维数组形参。可以使用循环来遍历和操作数组的元素。

下面是一个示例函数,演示了如何传递一维数组作为函数形参:

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

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    printArray(numbers, size);
    return 0;
}


- 数组作为函数参数传递的是,数组的首地址(地址传递)。
  - 并且,一般在传递数组的同时,传递数组的大小。
  - `len = sizeof(array) / sizeof(array[0]); `
- `printArray(array, len);`   数组名代表的是整个数组的首地址
- `printArray(&array[0], len);`   第一个元素的地址也是数组的首地址
- 由于传递的是数组的首地址,如果在函数中对数组的内容进行修改,则原数组中的内容也被修改(实参传递地址给形参)。

```cpp
#include <stdio.h>
//形参中不存在数组的概念,即使括号中约定了数组的大小,也无效
void printArray(int array[], int len) 
{
    //在操作系统中用8个字节表示一个地址
	printf("printArray: array的大小是:%d\n", sizeof(array));
	putchar('\n');
}
int main()
{
    int len = 0;
    int array[5] = {1, 2, 3, 4, 5};
    len = sizeof(array) / sizeof(array[0]); 
    printf("main: array的大小是:%d\n", sizeof(array));  //代表整个数组的大小,输出 5 * 4 = 20
    printArray(array, len);
    return 0;
}

函数 - 二维数组作形参

C语言函数 - 二维数组作形参

  • 函数声明和定义:

    • 使用以下两种方式声明和定义带有二维数组形参的函数:
      • void functionName(dataType arrayName[rowSize][colSize]);
      • void functionName(dataType (*arrayName)[colSize], int rowSize);
  • 数组传递:

    • 在C语言中,传递二维数组作为函数参数实际上是传递指针。
    • 函数内部对形参的操作会影响原始数组。
  • 数组维度:

    • 函数中声明二维数组形参时需要指定行数和列数。
    • 可以使用指针运算来获取数组的行数。
  • 使用数组:

    • 在函数内部,可以像使用普通的二维数组一样使用传递进来的二维数组形参。
    • 可以使用双重循环遍历和操作数组的元素。
  • 注意事项:

    • 需要同时传递数组的行数和列数作为额外的参数。
    • 传递二维数组时,实际上传递的是数组的首地址(指针)。

示例代码:

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

int main() {
    int matrix[2][3] = { {1, 2, 3}, {4, 5, 6} };
    printArray(matrix, 2);
    return 0;
}


```cpp
#include <stdio.h>

int getArrayData(int (*p)[4], int lines, int columns) //数组指针来接收二维数组的地址,行数,列数
{ 
    int data;
    return data = *(*(p + lines) + columns);
}

int main()
{
    int array[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
	int data;
    data = getArrayData(array, 1, 1); //获取array[1][1]的值
    return 0;
}
  1. 函数声明和定义:在声明和定义函数时,我们需要指定二维数组作为形参。可以使用以下两种方式进行声明和定义:

void functionName(dataType arrayName[rowSize][colSize]);

或者

void functionName(dataType (*arrayName)[colSize], int rowSize);

这两种方式都允许我们传递一个二维数组作为形参。

  1. 数组传递:在C语言中,数组传递实际上是通过指针来实现的。当我们传递二维数组作为函数参数时,实际上传递的是数组的首地址(指针),而不是整个数组的内容。这意味着在函数内部对形参进行操作时,实际上是在操作原始数组。

  2. 数组维度:在函数中声明二维数组形参时,需要指定数组的维度,即行数和列数。这样可以确保函数正确地访问和处理数组元素。

  3. 使用数组:在函数内部,我们可以像使用普通的二维数组一样使用传递进来的二维数组形参。可以使用双重循环来遍历和操作数组的元素。

需要注意的是,二维数组作为函数形参时,一般需要同时传递数组的行数和列数作为额外的参数。这是因为在函数内部,数组的列数是必需的,而数组的行数可以通过指针运算来获得。

以下是一个示例函数,演示了如何传递二维数组作为函数形参:

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

int main() {
    int matrix[2][3] = { {1, 2, 3}, {4, 5, 6} };
    printArray(matrix, 2);
    return 0;
}

在上述示例中,printArray函数接受一个二维数组和行数作为形参,然后在函数内部打印数组的内容。通过传递matrix数组和行数2到函数中,我们可以成功打印出数组的元素。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VengaZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值