欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Linux中C语言指针的意义及高级用法

最编程 2024-07-08 07:18:48
...
  • 函数指针: 函数指针用于指向函数,可以实现回调机制和动态函数调用。

    void myFunc(int a) { 
        printf("Value: %d\n", a); 
    } 
    void execute(void (*func)(int), int value) { 
        func(value); 
    } 
    int main() { 
        void (*funcPtr)(int) = &myFunc; 
        execute(funcPtr, 5); 
        return 0; 
    }
  • 指针数组和数组指针: 指针数组和数组指针在处理二维数组和动态数组时非常有用。

    int *array[10]; // 指针数组,每个元素是一个指向int的指针 
    int (*ptr)[10]; // 数组指针,指向一个包含10个int的数组
  • 指向指针的指针: 指向指针的指针(多级指针)允许间接访问数据,常用于动态分配二维数组和复杂的数据结构。

    int a = 10; 
    int *p = &a; 
    int **pp = &p; 
    printf("Value: %d\n", **pp);
  • 内存映射(Memory Mapping): 在Linux中,内存映射用于将文件或设备映射到内存空间,实现高效的数据访问和操作。

    #include <fcntl.h> 
    #include <sys/mman.h> 
    #include <unistd.h> 
    int main() { 
        int fd = open("example.txt", O_RDONLY); 
        char *data = (char *)mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); 
        printf("Data: %s\n", data); 
        munmap(data, size); 
        close(fd); 
        return 0; 
    }
  • 函数参数中的指针与指针数组: 使用指针作为函数参数,可以直接修改原数据,而不是传递数据的副本。这在处理大数据结构时尤为重要。

    void modifyValue(int *p) { 
        *p = 20; 
    } 
    int main() { 
        int a = 10; 
        modifyValue(&a); 
        printf("Modified Value: %d\n", a); 
        return 0; 
    }
  • 动态内存管理: 动态内存管理是C语言的核心功能之一。通过malloc、calloc、realloc和free等函数,程序可以在运行时动态分配和释放内存。

    int *p = (int *)malloc(sizeof(int) * 10); // 分配10个int大小的内存 
    if (p != NULL) { 
        for (int i = 0; i < 10; i++) { 
            p[i] = i * 10; 
        } 
        free(p); // 释放内存 
    }
  • 推荐阅读