博客
关于我
C++学习日记14——指针的概念、用法及实例
阅读量:541 次
发布时间:2019-03-09

本文共 1691 字,大约阅读时间需要 5 分钟。

指针的理解与应用:从基础到实践

在C/C++编程中,指针是构建动态程序的核心工具之一,其掌握程度直接反映了程序员的技术深度。本文将从指针的基础概念出发,逐步探讨其用途和应用场景。

一、指针的基础概念

1.1 内存结构与地址

计算机内存由众多内存单元组成,每个单元都有唯一的地址(如0x1000)。内存单元储存数据,程序通过访问这些单元执行操作。

1.2 指针的定义

指针是一种特殊的变量,用于存储另一个变量的地址。在C/C++中,*符作为解引用符,&符用于取值符。例如:

int a = 10; char *p = &a; // p现在指向a的地址

这样,p可以访问a的值。

1.3 指针的特点

  • 指针本身是对象:可以进行赋值、比较、作为参数传递。
  • 无需初值:可以用undeclared变量直接赋值(如int *p;)。

2. 定义指针变量

定义格式为:

数据类型 *变量名

例如:

int *p; // p为整型指针char *c_ptr; // c_ptr为字符型指针

注意:*和&的区别。*解引用指针值,&取指针变量本身的地址。

3. 指针与变量的关系

  • 地址的表示:变量有地址,指针变量存储地址。
  • 引用与指向:通过*运算符访问指向的对象,&运算符获取地址。

4. 使用步骤

  • 定义指针变量
    int *a_ptr; // 定义一个整型指针
  • 初始化
    int num = 5; int *p = # // p指向num的地址
  • 访问
    printf("%d\n", *p); //访问指向num的值
  • 二、指针在函数中的应用

    2.1 作为参数

    通过指针实现对参数的间接传递,支持修改原变量。

    void swap(int *a, int *b) {    int temp = *a;    *a = *b;    *b = temp;}

    2.2 返回指针函数

    函数返回指针,实现灵活的数据处理。

    char *noblank(char s[]) {   int k = 0, j; //查找第一个非空格字符的位置   while (s[k] == ' ')      k++;   j = k; //将空格替换为null字符   while (s[j] != '\0') {      s[j - k] = s[j];      j++;   }   s[j - k] = '\0'; //返回去掉前导空格后的字符串指针   return s;}

    2.3 指向函数的指针

    函数名代表入口地址,通过*调用函数。

    double (*pf)(double); // pf指向平方根函数pf = sqrt; //调用sqrt函数

    三、指针与数据结构结合

    3.1 动态数组

    分配内存并动态扩展数组长度。

    int *dyn_arr = (int*)malloc(100); //动态分配内存

    3.2 链表结构

    每个节点包含数据和下一个指针。

    struct Node { int data; struct Node *next; };

    四、实例分析:示例与应用场景

    4.1 实例1:排序三个数

    通过指针实现参数的间接传递和引用传递。

    void swap(int *i, int *j) {   int temp = *i;   *i = *j;   *j = temp;}int main() {   int a = 10, b = 11, c = 2;   // ...}

    4.2 实例2:处理字符串

    清除首部空格并返回字符串。

    char *noblank(char s[]) {   // 如前所述,详细代码处理}

    4.3 实例3:函数调用

    通过函数指针灵活调用数学函数。

    double Function(double(*f)(double), double x) {   // ...}

    五、结论与总结

    指针作为C/C++的核心工具,广泛应用于参数传递、动态内存管理和数据结构开发中。在正确定义和使用情况下,指针能够显著提升程序效率和灵活性。谨慎使用,因为指针的无障碍操作可能引发错误或安全隐患。

    转载地址:http://ynzsz.baihongyu.com/

    你可能感兴趣的文章
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主从关系切换
    查看>>
    MYSQL 主从同步文档的大坑
    查看>>
    mysql 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 事务知识点与优化建议
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>
    Mysql 分页语句 Limit原理
    查看>>
    MySql 创建函数 Error Code : 1418
    查看>>