C语言的二级指针用法
时间: 2025-05-21 20:33:57 浏览: 10
### 关于C语言中二级指针的用法
在C语言中,二级指针是一种特殊的指针类型,它指向另一个指针变量。这意味着二级指针存储的是一个一级指针的地址。以下是关于二级指针的一些基本概念及其使用方法。
#### 基本定义与声明
当我们在程序中创建一个二级指针时,实际上是为其分配了一个内存空间来保存某个一级指针的地址。例如:
```c
#include <stdio.h>
int main() {
int num = 10;
int *ptr = # // 一级指针,指向整型变量 `num`
int **pptr = &ptr; // 二级指针,指向一级指针 `ptr`
printf("num 的值: %d\n", num);
printf("通过一级指针访问 num 的值: %d\n", *ptr);
printf("通过二级指针访问 num 的值: %d\n", **pptr);
return 0;
}
```
在这个例子中,`*ptr` 表示解引用操作符用于获取 `num` 变量的值,而 `**pptr` 则表示两次解引用操作最终也得到 `num` 的值[^1]。
#### 动态内存管理中的应用
除了简单地间接访问数据外,二级指针还常被用来动态分配多维数组或者处理函数返回复杂结构的情况。比如,在堆上申请一块连续的空间作为二维数组使用时可以这样写:
```c
#include <stdio.h>
#include <stdlib.h>
void allocate_2D_array(int ***array, int rows, int cols){
(*array) = (int **)malloc(rows * sizeof(int *));
for(int i=0;i<rows;i++) {
(*(array)+i)=(int *)malloc(cols*sizeof(int));
}
}
int main(){
int row=3,col=4,**arr=NULL;
allocate_2D_array(&arr,row,col);
// 初始化并打印矩阵...
for(int i=0;i<row;i++)
for(int j=0;j<col;j++) arr[i][j]=i*j;
for(int i=0;i<row;i++){
for(int j=0;j<col;j++) printf("%d ",arr[i][j]);
puts("");
}
// 清理资源
for(int i=0;i<row;i++) free(arr[i]);
free(arr);
return 0;
}
```
此代码片段展示了如何利用二级指针实现动态二维数组的功能[^2]。
#### 参数传递场景下的优势
另外一个重要用途是在向子函数传参过程中改变调用者环境里的原始对象本身而非副本。如果仅需修改数值,则单层指针已足够;但如果要调整整个指针所指向的位置就需要借助双星号形式了——即所谓的“指针参数”。
假设有一个需求是要交换两个字符串的内容位置而不只是它们各自的拷贝版本,那么就可以采用如下方式完成任务:
```c
#include<stdio.h>
#include<string.h>
// 函数原型声明
void swap_strings(char **str1,char **str2);
int main(void){
char strA[]="Hello";
char strB[]="World";
printf("Before swapping:\nStr A:%s \t Str B :%s\n",strA,strB );
/* 调用swap_strings*/
swap_strings((char**)&strA,(char**)&strB );
printf("\nAfter Swapping :\nStr A:%s\t Str B :%s\n",strA ,strB );
return 0;}
/* 定义实际执行交换动作的方法 */
void swap_strings(char **stringOnePtrRef,char **stringTwoPtrRef ){
char tempStorage[strlen(*stringTwoPtrRef )+1];
strcpy(tempStorage,*stringTwoPtrRef );
strcpy(*stringTwoPtrRef ,*stringOnePtrRef );
strcpy(*stringOnePtrRef ,tempStorage);
}
```
这里值得注意的一点是我们把原生字符数组的名字当作地址送入到更高层次别的指针里去操纵其内部成员项之间的相对次序关系[^3]。
---
阅读全文
相关推荐

















