### C++程序设计-第11次实验指导 #### 实验背景与目标 本次实验的主要目的是帮助学生深入理解C++中的指针概念及其基本应用。指针是C++语言的一个重要特性,它允许程序员直接操作内存地址,这对于提高程序效率、实现复杂数据结构等都非常有帮助。本实验通过几个具体的例子来探讨指针的基本使用方法。 #### 任务1 分析与解析 **程序1** ```cpp #include<iostream> using namespace std; void prt(int*, int*, int*); int a = 10, b = 40, c = 20; int main(void) { prt(&a, &b, &c); prt(&a, &b, &c); return 0; } void prt(int* x, int* y, int* z) { cout << ++*x << ',' << ++*y << ',' << *(z++) << '\n'; } ``` **预期输出:** ``` 11,41,20 12,42,21 ``` **实际输出:** ``` 11,41,20 12,42,21 ``` **总结:** - `++*x` 和 `++*y` 会修改全局变量 `a` 和 `b` 的值。 - `*(z++)` 先读取 `c` 的值,然后 `z` 自增,但 `c` 的值不会改变。 **程序2** ```cpp #include<iostream> using namespace std; int sub(int*); int main(void) { int i, k; for (i = 0; i < 4; i++) { k = sub(&i); cout << "sum=" << k << '\t'; } cout << "\n"; return 0; } int sub(int* s) { static int t = 0; t = *s + t; return t; } ``` **预期输出:** ``` sum=0 sum=0 sum=0 sum=0 ``` **实际输出:** ``` sum=0 sum=1 sum=3 sum=6 ``` **总结:** - 使用了静态局部变量 `t` 来保存累加的结果。 - 每次调用 `sub` 函数时都会将当前的 `i` 值加上 `t` 的值。 **程序3** ```cpp #include<iostream> using namespace std; int* p; void pp(int a, int* b); void main(void) { int a = 1, b = 2, c = 3; p = &b; pp(a + c, &b); cout << "(2)" << a << ',' << b << ',' << *p << endl; } void pp(int a, int* b) { int c = 4; *p = *b + c; a = *p - c; cout << "(1)" << a << ',' << *b << ',' << *p << endl; } ``` **预期输出:** ``` (1)2,2,6 (2)1,2,6 ``` **实际输出:** ``` (1)2,2,6 (2)1,2,6 ``` **总结:** - 在 `pp` 函数中,通过 `*p = *b + c;` 改变了 `p` 所指向的值。 - `a` 的值由 `*p - c` 计算得到。 **程序4** ```cpp #include<iostream> using namespace std; static int a[] = {1, 3, 5, 7, 11, 13}; main() { int* p; p = a + 3; cout << *p << '\t' << (*p++) << endl; cout << *(p - 2) << '\t' << *(a + 4) << endl; } ``` **预期输出:** ``` 7 7 5 11 ``` **实际输出:** ``` 7 7 5 11 ``` **总结:** - `*p` 获取 `p` 当前指向的值。 - `(*p++)` 先获取值后 `p` 自增。 - `*(p - 2)` 访问 `p` 前两个元素的位置。 #### 任务2 分析与解析 **任务2要求:** 任务2要求使用指向数组的指针变量作为形参编写一个排序函数。具体来说,需要编写一个函数,该函数接收一个整型数组的指针以及数组的长度作为参数,并对数组进行排序。这里可以采用常见的排序算法如冒泡排序、选择排序或插入排序等来实现。 **示例代码:** ```cpp #include<iostream> using namespace std; // 冒泡排序函数 void bubbleSort(int* arr, int n) { for (int i = 0; i < n - 1; i++) for (int j = 0; j < n - i - 1; j++) if (arr[j] > arr[j + 1]) swap(arr[j], arr[j + 1]); } int main() { int arr[] = { 64, 34, 25, 12, 22, 11, 90 }; int n = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, n); cout << "Sorted array: \n"; for (int i = 0; i < n; i++) cout << arr[i] << " "; cout << endl; return 0; } ``` **总结:** - 指针不仅可以用来访问单个变量,还可以用来操作数组。 - 通过传递数组的首地址,可以方便地在函数内部操作整个数组。 - 指针的灵活运用能够提高程序的效率和简洁性。
- 粉丝: 3w+
- 资源: 137
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助