C++指针详解:从基础到数组及函数参数

需积分: 0 1 下载量 76 浏览量 更新于2024-08-04 1 收藏 22KB DOCX 举报
"C++指针知识笔记" C++中的指针是编程中非常重要的一个概念,它允许我们直接操作内存地址,实现高效的数据操作和复杂的数据结构。以下是对标题和描述中涉及的知识点的详细解释: 1. **指向类型的声明**: 在C++中,`*`符号用于声明指针变量。例如,在`int *p`中,`*`表明`p`是一个指针,而`int`是`p`所指向的类型,即`p`指向的内存区域存储的是整型数据。 2. **指针变量的类型**: 指针变量本身的类型是`指针到某种类型`。如`int *p`中,`p`的类型是`int*`,即指向整型的指针。 3. **使用指针访问变量**: 在`void test()`函数中,`int num = 10; int *p = &num; cout << *p << endl;`这段代码展示了如何通过指针访问变量。`*p`是解引用操作,它返回`p`所指向的变量的值,所以`cout << *p`会打印出`num`的值。 4. **指针数组和数组指针**: 在`void test0()`函数中,`char *arry[2]`定义了一个包含两个元素的指针数组,每个元素都是一个字符指针。`arry`是一个数组,它的每个元素都可以指向一个字符串。`*(arry[i]+1)`访问了字符串的第二个字符。 5. **数组的地址**: `void test1()`函数展示了数组的地址操作。`arr`是一个数组,`arr`代表数组首元素的地址,`&arr+1`则是整个数组的地址加上一个数组长度,因为数组在内存中是连续存储的。 6. **数组指针**: 在`void test2()`中,`int (*p)[5] = &arr;`声明了`p`为一个指向含有五个整数的数组的指针,`*p`表示数组的首元素地址,`*p+2`则是数组的第三个元素地址,`*(*p+2)`解引用后得到数组的第三个元素值。 7. **二维数组与数组指针**: 在`void test3()`中,`int (*p)[3] = arr;`声明了`p`为指向包含三个整数的数组的指针,这与二维数组的第一行相等。`*(p+1)+1`指向了二维数组的第二行的第二个元素的地址,`*(*(p+1)+1)`则获取该元素的值。 8. **指针作为函数参数**: 当指针作为函数参数时,可以修改函数外部的变量。例如,`void setNum4_1_`(描述中未给出完整代码),如果传递`num`的地址,函数内部可以通过指针修改`num`的值。传递变量的值给函数不会改变原始变量,因为函数参数是副本。 9. **指针的动态内存分配**: C++中还可以使用`new`关键字动态分配内存,`delete`释放内存。例如,`int *ptr = new int;`创建了一个新的整型变量,`delete ptr;`则释放了这个变量占用的内存。 10. **指针的比较和操作**: 指针可以进行比较操作,如`==`、`!=`、`<`、`>`等,也可以进行算术运算,如`+`、`-`,但这些操作必须遵循指针的内存地址规则。 以上是C++指针基础知识的总结,包括声明、类型、解引用、数组指针、二维数组和函数参数等方面,对于理解和使用C++指针具有重要意义。