### 指针深入知识点详解 #### 一、关于指针概念的回顾 1. **内存地址和指针的关系:** - 在计算机程序中,每个数据都有它在内存中的位置,即内存地址。 - **指针**是一种变量,它的值是另一个变量的地址,也就是内存地址。 - 当我们谈论指针时,实际上是在处理内存地址,通过指针我们可以间接地访问和操作内存中的数据。 2. **什么叫指针?什么是指针变量?** - **指针**是一种特殊的变量,用于存储内存地址。 - **指针变量**是用来存放内存地址的变量。 - 例如,`int *px;` 声明了一个整型指针变量 `px`,它可以存储指向整型变量的地址。 3. **定义/使用指针变量的步骤** - 定义指针变量:`数据类型 *指针变量名;` - 初始化指针变量:可以通过将一个变量的地址赋给指针来初始化它,例如 `int x; int *px = &x;`。 - 使用指针变量:可以通过 `*px` 来访问指针所指向的变量的值。 **注意事项:** - 指针只能指向同种类型的变量。例如,一个整型指针只能指向整型变量。 - 不能给指针变量赋常量值(除了0或NULL),这会引发编译错误或运行时错误。 #### 二、指针的基本使用案例 - **求两个数的和** - 方法一:设计一个带返回值的函数实现。 - 方法二:设计一个不带返回值的函数实现(用指针返回和值)。 - 传递实参 `sum` 的地址给形参 `sum`,在函数体内修改形参所指向地址中的内容为 `a + b`。 - 这样实参 `sum` 的值也会被修改为 `a + b` 的结果。 - **求两个数的和与差** - 问题分析:函数的返回值只能返回一个值,无法直接解决同时返回和与差的问题。 - 方法1:结果存到数组中,元素0存和,元素1存差。 - 方法2:使用指针解决问题。 - 传递两个变量的地址给函数,在函数体内分别计算和与差,并更新这些地址中的值。 #### 三、数组的指针与数组指针变量 - **数组的指针:** 指的是数组的起始地址。 - **数组元素的指针:** 指的是数组元素的地址。 - **数组指针变量:** 指的是指向数组的指针变量。 - 示例声明并初始化数组指针变量: ```c int a[10], *pa; pa = a; // 或者 pa = &a[0]; ``` - **通过指针引用数组元素** - `pa`, `a+0`, `&a[0]` 均指向同一单元 — 数组 `a` 的首地址,也是 0 号元素 `a[0]` 的首地址。 - `pa+1`, `a+1`, `&a[1]` 指向数组元素 `a[1]`。 - `pa+i`, `a+i`, `&a[i]` 指向数组元素 `a[i]`。 - **引用数组元素的方法** - 第一种方法为下标法,即用 `a[i]` 的形式访问数组元素。 - 第二种方法为指针法,采用 `*(a+i)` 形式访问数组元素。 - 如果数组指针变量 `pa` 指向 `a`,则 `pa[i]` 也可以访问数组元素。 #### 四、使用指针变量时需要注意的问题 - 指针变量可以改变自身的值,而常量却不行。 - 指针变量的值可以改变,因此需要确保其始终指向有效的数组元素,C 编译器不会检查数组越界错误。 - 注意指针变量的运算: - `pa++` 指向下一个元素。 - `*p++` 等价于 `*(p++)` —— 先取 `*p` 值,再令 `p` 加 1。 - `*(++p)` 则先令 `p` 加 1,再取 `*p` 值。 - `(*p)++` 表示取出 `*p` 的值,然后此值再加 1。 #### 五、一维数组、指针和函数 - **一维数组传入函数的方法** - 形参是数组形式的:`返回值类型 函数名(int a[]);` - 形参是指针形式的:`返回值类型 函数名(int *p);` - **利用函数初始化一维数组** - 可以通过函数来初始化一维数组,例如例 10.4 所示。 - **利用函数输出一维数组** - 可以通过函数来输出一维数组,例如例 10.5 所示。 #### 六、字符串指针 - **回顾字符数组和字符串的区别** - `char s1[] = {'h','e','l','l','o'};` 是字符数组。 - `char s2[] = {'h','e','l','l','o','\0'};` 是字符串。 - `char s3[] = "hello";` 是字符串,可读可写。 - `char *p="hello";` 是指向字符串的指针,只读不可写。 - **字符串的输入** - 可以使用 `scanf("%s", s)` 或 `get(s)` 来输入字符串。 - **利用指针遍历字符串** - 可以使用指针来遍历字符串,例如 `while (*p != '\0') { ... }`。 以上就是从给定文件的标题、描述以及部分内容中提取的关键知识点,涵盖了指针的基本概念、使用方法以及与数组和函数结合的应用等方面。
剩余56页未读,继续阅读
- 粉丝: 126
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Python SOAP 客户端.zip
- Python ODBC 桥.zip
- Python MIDI 库.zip
- Python for DevOps repo 包含有用的 Python 脚本,可供您学习并在日常 DevOps 自动化任务中实施 .zip
- Python API 包装器和库列表.zip
- Python - 与我的 YouTube 频道相关的脚本存储在这里,可以用任何版本的 Python 编写.zip
- PyClass 课程计划.zip
- Puppet 模块用于安装和管理 Python、pip、virtualenvs 和 Gunicorn 虚拟主机 .zip
- jieshao123456
- Java 将本地mp4推流rtsp