首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >指针用法及分类

指针用法及分类

作者头像
小李很执着
发布2024-06-15 08:53:25
发布2024-06-15 08:53:25
8900
代码可运行
举报
文章被收录于专栏:学习笔记学习笔记
运行总次数:0
代码可运行
指针是一种特殊的变量,其存储的是另一个变量的内存地址。

1.指针的具体用法如下:

1.声明指针变量

代码语言:javascript
代码运行次数:0
运行
复制
int *ptr; // 声明一个指向整型变量的指针
char *ptr_char; // 声明一个指向字符型变量的指针

2.获取变量的地址

代码语言:javascript
代码运行次数:0
运行
复制
int num = 10;
int *ptr_num = # // 将num的地址赋给ptr_num

3.通过指针访问变量的值:

代码语言:javascript
代码运行次数:0
运行
复制
int value = *ptr_num; // 通过ptr_num指针访问num的值

4.指针的算术运算:

代码语言:javascript
代码运行次数:0
运行
复制
int arr[5] = {1, 2, 3, 4, 5};
int *ptr_arr = arr; // 指向数组arr的第一个元素
int third_element = *(ptr_arr + 2); // 访问数组arr的第三个元素

 5.指针作为函数参数:

代码语言:javascript
代码运行次数:0
运行
复制
void increment(int *ptr) {
    (*ptr)++; // 递增ptr指向的变量的值
}

int num = 5;
increment(&num); // 将num的地址传递给increment函数

2.指针参数的具体用法如下:

1.传递变量的地址:

代码语言:javascript
代码运行次数:0
运行
复制
void modifyValue(int *ptr) {
    *ptr = 100; // 修改ptr指向的变量的值为100
}

int num = 5;
modifyValue(&num); // 将num的地址传递给modifyValue函数

2.传递数组:

代码语言:javascript
代码运行次数:0
运行
复制
void printArray(int *arr, int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]); // 访问数组元素
    }
}

int numbers[] = {1, 2, 3, 4, 5};
printArray(numbers, 5); // 将数组名作为指针传递给printArray函数

3.返回多个值:

代码语言:javascript
代码运行次数:0
运行
复制
void calculate(int a, int b, int *sum, int *difference) {
    *sum = a + b;
    *difference = a - b;
}

int result_sum, result_diff;
calculate(10, 5, &result_sum, &result_diff); // 返回两个计算结果

4.动态内存分配:

代码语言:javascript
代码运行次数:0
运行
复制
void allocateMemory(int **ptr) {
    *ptr = (int *)malloc(sizeof(int)); // 分配内存
}

int *dynamic_ptr;
allocateMemory(&dynamic_ptr); // 将指向指针的指针传递给函数

通过使用指针参数,可以实现对函数外部变量的修改,传递数组和动态内存分配等功能。

3.指针函数是指返回值为指针类型的函数

代码语言:javascript
代码运行次数:0
运行
复制
#include <stdio.h>

int* createArray(int size) {
    int* arr = (int*)malloc(size * sizeof(int));  // 动态分配内存空间
    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }
    return arr;
}

int main() {
    int size = 5;
    int* arr = createArray(size);
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    free(arr);  // 释放内存空间
    return 0;
}

在这个例子中,createArray 函数将返回一个指向动态分配的数组的指针。在 main 函数中调用 createArray 函数,并打印出返回的数组的元素。最后需要记得使用 free 函数释放分配的内存空间。

指针函数在需要返回动态分配内存空间或其他需要返回地址的场景中非常有用。通过返回指针,可以在函数外部访问和操作这些内存空间。

4.函数指针是指向函数的指针变量

函数指针的声明方式如下:

代码语言:javascript
代码运行次数:0
运行
复制
返回值类型 (*指针变量名)(参数列表)

例如,声明一个指向返回类型为int、参数列表为int和int的函数的指针变量,可以使用以下语句:

代码语言:javascript
代码运行次数:0
运行
复制
int (*ptr)(int, int);

函数指针的赋值方式有两种:

1.直接将函数名赋值给指针变量。例如:

代码语言:javascript
代码运行次数:0
运行
复制
int add(int a, int b) {
    return a + b;
}

int (*ptr)(int, int) = add;

2.使用取函数地址的操作符&。例如

代码语言:javascript
代码运行次数:0
运行
复制
int (*ptr)(int, int);
ptr = &add;

通过函数指针调用函数的方式有两种:

使用指针变量名加括号调用。例如:

代码语言:javascript
代码运行次数:0
运行
复制
int result = (*ptr)(3, 4);

使用指针变量名加函数名调用。例如:

代码语言:javascript
代码运行次数:0
运行
复制
int result = ptr(3, 4);

函数指针可以作为函数的参数和返回值,从而实现函数的动态调用。例如:

代码语言:javascript
代码运行次数:0
运行
复制
int add(int a, int b) {
    return a + b;
}

int subtract(int a, int b) {
    return a - b;
}

int calculate(int a, int b, int (*ptr)(int, int)) {
    return ptr(a, b);
}

int main() {
    int result1 = calculate(3, 4, add);
    int result2 = calculate(3, 4, subtract);
    
    return 0;
}

通过函数指针,可以实现函数的动态调用,提高代码的灵活性和可扩展性。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.指针的具体用法如下:
    • 1.声明指针变量
    • 2.获取变量的地址
    • 3.通过指针访问变量的值:
    • 4.指针的算术运算:
    •  5.指针作为函数参数:
  • 2.指针参数的具体用法如下:
    • 1.传递变量的地址:
    • 2.传递数组:
    • 3.返回多个值:
    • 4.动态内存分配:
  • 3.指针函数是指返回值为指针类型的函数
  • 4.函数指针是指向函数的指针变量
    • 函数指针的赋值方式有两种:
    • 通过函数指针调用函数的方式有两种:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档