C 语言速查:函数、值传递、指针传递、数组的传递

参数的传递

值传递(传递数据副本)

特点​​:形参是实参的副本,函数内修改形参不会影响实参。

示例 1:基本数据类型的值传递

#include <stdio.h>
void increment(int a) {
    a += 1;  // 修改形参的值
}
int main() {
    int x = 10;
    increment(x);
    printf("x = %d\n", x);  // 输出仍为 10
    return 0;
}

示例 2:结构体传递

#include <stdio.h>
typedef struct { int x; int y; } Point;
void move_point(Point p) {
    p.x += 5;  // 修改形参结构体的成员
}
int main() {
    Point pt = {10, 20};
    move_point(pt);
    printf("移动后: x=%d, y=%d\n", pt.x, pt.y);  // 输出仍为 10, 20
    return 0;
}

指针传递(传递内存地址)

示例 1:交换变量值

#include <stdio.h>
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main() {
    int x = 3, y = 5;
    swap(&x, &y);
    printf("交换后: x=%d, y=%d\n", x, y);  // 输出发生改变,为 5, 3
    return 0;
}

示例 2:修改结构体成员

#include <stdio.h>
typedef struct { int x; int y; } Point;
void move_point_ptr(Point *p) {
    p->x += 5;  // 直接修改实参结构体的成员
}
int main() {
    Point pt = {10, 20};
    move_point_ptr(&pt);
    printf("移动后: x=%d, y=%d\n", pt.x, pt.y);  // 输出 15, 20
    return 0;
}

数组的传递

数组的传递有一些特殊情况需要注意,因此单独列出

通过指针传递数组

这是最常用的方法,因为数组名本质上是指向数组首元素的指针。
​​实现方式​​:

  • 函数参数声明为指针形式(如 int *arr 或 int arr[])。
  • 传递数组名时,实际传递的是数组首地址,函数内通过指针操作数组元素。
void processArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        arr[i] *= 2;
    }
}

//语法糖,等价于上面
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}
// 调用时:processArray(myArray, size);

传递固定大小的数组​​

在函数参数中显式指定数组大小(如 int arr[5]),但实际仍以指针形式处理。

void printFixedArray(int arr[5]) {
    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
}

多维数组传递​​

需在函数参数中明确指定除第一维外的其他维度大小。

void process2DArray(int arr[][3], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 3; j++) {
            arr[i][j] *= 2;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值