c语言中指针作函数参数

一、指针作函数参数的基本概念

在C语言中,指针是一种特殊的变量类型,它存储了另一个变量的内存地址。当我们将一个指针作为函数参数传递时,实际上是将该指针所指向的内存地址传递给函数。这样,函数就可以通过这个内存地址来访问和修改原始变量的值。这种特性使得指针在处理数组、结构体等复杂数据类型时具有很大的灵活性。

二、指针作函数参数的使用场景

1. 数组作为函数参数

数组名本身就是一个指针,因此可以将数组作为函数参数传递。这样,函数可以直接操作数组的元素,而无需关心数组的大小。下面是一个示例:

#include <stdio.h>

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

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

在这个示例中,print_array函数接受一个整数数组指针arr和一个整数size作为参数。通过遍历数组并打印每个元素,我们可以实现对数组的操作。

2. 结构体作为函数参数

结构体是一种复合数据类型,它可以包含多个不同类型的成员变量。当结构体作为函数参数传递时,可以将其视为一个整体,并通过指针或引用来访问和修改其成员变量。下面是一个示例:

#include <stdio.h>

typedef struct {
   
    int x;
    int y;
} Point;

void move_point(Point *p, int dx, int dy) {
   
    p->x += dx;
    p->y += dy;
}

int main() {
   
    Point p = {
   1, 2};
    printf("Before moving: (%d, %d)
", p.x, p.y);
    move_point(&p, 3, 4);
    printf("After moving: (%d, %d)
", p.x, p.y);
    return 0;
}

在这个示例中,我们定义了一个名为Point的结构体,包含两个整数成员变量xymove_point函数接受一个Point结构体指针p以及两个整数dxdy作为参数。通过修改指针所指向的结构体的成员变量,我们可以实现对结构体的修改。

3. 动态内存分配

在某些情况下,我们需要根据程序运行时的需求来分配内存。这时,可以使用指针作为函数参数,以便在函数内部分配和释放内存。下面是一个示例:

#include <stdio.h>
#include <stdlib.h>

void reverse_string(char **str) {
   
    int len = strlen(*str);
    char *reversed = (char *)malloc((len + 1) * sizeof(char));
    if (reversed == NULL) {
   
        printf("Memory allocation failed.
");
        return;
    }
    for (int i = 0; i < len; i++) {
   
        reversed[i] = (*str)[len - 1 - i];
    }
    reversed[len] = '\0';
    free(*str);
    *str = reversed;
}

int main() {
   
    char *str = strdup("Hello, world!");
    printf("Original string: %s
", str);
    reverse_string(&str);
    printf("Reversed string: %s
", str);
    free(str);
    return 0;
}

在这个示例中,我们定义了一个名为reverse_string的函数,接受一个字符指针的指针str作为参数。在函数内部,我们使用malloc函数为字符串分配内存,并将反转后的字符串赋值给原来的指针。最后,我们使用free函数释放原始字符串所占用的内存。

相关推荐

  1. c语言指针函数参数

    2024-01-17 16:14:03       63 阅读
  2. c语言函数指针形参

    2024-01-17 16:14:03       32 阅读
  3. C语言指针函数函数指针

    2024-01-17 16:14:03       19 阅读
  4. 漫谈:C语言 值传递 函数参数 指针

    2024-01-17 16:14:03       40 阅读
  5. C语言——函数指针

    2024-01-17 16:14:03       35 阅读
  6. C语言——函数指针

    2024-01-17 16:14:03       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-17 16:14:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-17 16:14:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-17 16:14:03       82 阅读
  4. Python语言-面向对象

    2024-01-17 16:14:03       91 阅读

热门阅读

  1. 免费chartGPT网站汇总

    2024-01-17 16:14:03       42 阅读
  2. 向量数据库如何解决大语言模型的“幻觉”问题

    2024-01-17 16:14:03       53 阅读
  3. FreeBSD上安装mysql数据库

    2024-01-17 16:14:03       48 阅读
  4. 【cuda】四、基础概念:Cache Tiled 缓存分块技术

    2024-01-17 16:14:03       51 阅读
  5. Day 37 贪心算法 6

    2024-01-17 16:14:03       57 阅读
  6. c#之枚举类型和结构体

    2024-01-17 16:14:03       45 阅读
  7. Redis面试题15

    2024-01-17 16:14:03       49 阅读
  8. 编程语言的发展未来?

    2024-01-17 16:14:03       57 阅读
  9. 【VTKExamples::PolyData】第二期 曲率

    2024-01-17 16:14:03       47 阅读
  10. openssl3.2 - 官方demo学习 - mac - hmac-sha512.c

    2024-01-17 16:14:03       50 阅读
  11. element ui日期选择器清除后报错了

    2024-01-17 16:14:03       59 阅读