C++指针示例解析: argv数组与输出结果

需积分: 13 2 下载量 64 浏览量 更新于2024-08-24 收藏 8.58MB PPT 举报
在C++程序设计中,谭浩强的教材中提到一个关于指针的概念示例。首先,让我们分析给定的代码片段: ```c++ char *argv[] = {"hello", "nanjing", "jiangsu"}; char **pargv = argv; ``` 这里的`argv`是一个字符数组,存储的是字符串常量的地址,每个元素代表一个字符串的首地址。`pargv`是一个指向`argv`数组的指针,也就是一个指向指针的指针。 接下来的语句演示了如何通过指针操作访问数组中的元素: 1. `cout << *(pargv+1) << endl;` 这行代码将输出`argv`数组中的第二个元素,即`"nanjing"`的第一个字符,因为`pargv + 1`指向第二个元素的地址,`*`取址操作获取该地址上的值,即`n`。 2. `cout << (char)(**pargv + 1) << endl;` 这里使用了两次`*`操作。首先`**pargv`解引用`pargv`指向的地址,得到`argv`的地址,然后取该地址上的第一个字符的ASCII码加1(即`n`的ASCII码+1),转换为字符类型后输出,结果也是`n`。 3. `cout << *(*pargv+1) << endl;` 同样,先解引用`*pargv`得到`"nanjing"`的地址,然后取该地址上的第二个字符,即`a`。 4. `cout << *(*(pargv+2)+4) << endl;` 这部分涉及到两个指针级别的操作。`*(pargv+2)`得到`"jiangsu"`的地址,再解引用`*(pargv+2)`加上4,因为字符数组索引通常从0开始,所以`+4`实际上是偏移到下一个字符`i`的地址,取这个地址上的值,输出字符`i`。 这些例子展示了C++中指针和数组操作的基本用法,包括通过指针间接访问数组元素、以及嵌套指针解引用的复杂过程。C++语言允许程序员灵活地处理内存,这对于数据结构的操作和函数参数传递非常重要。同时,C++的可移植性得益于其简洁的语法和良好的结构化特性,使得在不同平台上的程序可以直接运行,但在编写过程中可能需要额外注意类型转换和指针的正确使用,以避免潜在的错误和问题。对于初学者来说,理解指针概念和C++的灵活性是一门学问,但只要掌握了规则,就能提高程序的效率和健壮性。