- 7
- 0
- 约3.44千字
- 约 11页
- 2022-03-01 发布于浙江
- 举报
PAGE
PAGE 1
C语言二级指针的用法与原理
二级指针关系图 上图所表达的意思也就是,一级指针变量 ptr1 存放的是 var 变量的地址,二级指针变量 ptr2 存放的是一级指针变量的地址。这也就是关于二级指针的相关概念。 一级指针与二级指针关系示例 下图是代码运行的结果: 代码运行结果截图 结果也很明显了,一级指针变量 p 存放的是变量 a 的地址,二级指针变量 q 存放的是一级指针变量 p 的地址,所以依据以上结果也能得出下面的等式: q = *q = p = **q = *p = a; 在了解了上述一级指针和二级指针的一个关系之后,我们再来看另外一个例子: 现在有如下代码: int main(void){ int **ipp; int i = 5,j = 6,k = 7; int *ip1 = } 假如这个时候,我们加了这么一句代码: ipp = 那么上述所涉及到的数据之间的关系是这样的: 变量关系图 依据上面这个图我们也可以知道,对于 ipp 的两次解引用的结果是 i 的值,也就是说 **ipp = 5,我想对于这个的理解并不困难,假如我连续在这个基础上添加代码,留意,是在上条代码的基础上添加如下代码: *ipp = ip2; 在这条代码的作用下,数据关系图就发生了转变,转变如下所示: 数据关系图 对于上述的变化来说,我们增加的代码转变的是 *ipp 的值,也就是说 ipp 的值是不会发生转变的,既然 ipp 的值不会发生转变,那么 ipp 指向 ip1 的关系不会发生转变,我们增加的代码转变了 *ipp 的值,那么也就是说转变了一级指针指向的值,而 ip2 是指向 j 的,所以也就有了上述的变化。 紧接着我们连续在第一条增加的代码的基础上重新增加一条代码,增加的代码如下: *ipp = 那么这个时候所对应的数据关系图如下图所示: 数据关系图 这个原理和刚才的一样,不在这里赘述了。 二级指针的应用那再叙述了上述的基本概念之后,我们知道二级指针变量是用于存放一级指针变量的地址的,那么在详细的实际应用中,又在什么地方可以用到二级指针呢?下面来看一个 C 语言函数传址调用的例子。 我们在刚学习指针的时候,都会遇到如下这样一个例子: void swap(int *a,int *b){ int (te)mp; temp = *a; *a = *b; *b = temp;} 之所以在定义函数时,把函数的形参定义为指针,而非如下这样的形式: void swap(int a,int b); 是由于C 语言在进行函数调用的时候,是将实参的值复制一份,并将其副本传递到函数调用里,假如形参定义的不是指针,那么在函数内部转变数值,不会对实参原来的值发生转变。而将形参定义成了指针的话,那么传到函数里面的值虽然是实参地址的一个副本,但是地址里存的值发生了转变,也就导致实参原来的值也发生了转变。 有了上述分析的基础上,我们知道,假如要在一个函数内转变一个数的值,那么就需要将形参定义为指针。同样的,假如我们要在一个函数内转变一个指针的值,我们就需要将形参定义了二级指针,下面来看这样一个例子: #include 《stdlib.h》int allocstr(int len,char **retptr){ char *p = malloc(len + 1);/*加 1 是为了 ‘\0’ */ (if) (p = NULL) return 0; *retptr = p; return 1;} 在调用的时候,是像下面这样子进行调用的: char *string = “hello world!”char *copystr;if (allostr(strlen(string),?str)) strcpy(copystr,string);else printf(“out of memory!\n”); 上述这个例子就是涉及到(字符)串拷贝的一个实际的例子,由于我们要在 allostr 里转变指针变量 copystr 的值(要使用 malloc 安排内存),那么就需要把 copystr 的地址传到函数里,那么这个时候,所定义的函数形参也就需要是二级指针了。 二级指针在单链表中的应用首先,我们有这样一个单链表的数据结构: typedef struct ListNode{ int data; struct ListNode *next;}ListNode; 依据这样一个数据结构,假定我们创建
您可能关注的文档
- 冬季安全行车注意事项.docx
- 冬季玻璃水要选用特效防冻型.docx
- 冬季潮湿多雨,切记行车注意事项.docx
- 冬季防厨房火灾八个注意事项.docx
- 冬季防火安全小知识.docx
- 冬季防火常识须知.docx
- 冬季防火注意事项.docx
- 冬季给爱车多一些关爱.docx
- 冬季滑雪安全小常识.docx
- 冬季滑雪游走俏 专家提醒注意安全防护.docx
- 联合资信 -多维视角破译商业银行不良资产处置系列专题 ——个人不良资产处置 202601.docx
- 药理学入门:妊娠用药 FDA 分级课件.pptx
- 联合资信 -低息差环境下的银行业生存图景:日本与欧洲的转型路径 20260127.docx
- 药理学入门:宫颈癌新药课件.pptx
- 联合资信 -低利率环境下的银行业生存图景:低利率时代我国商业银行净息差及盈利能力的演化逻辑与前瞻 202601.docx
- 药理学入门:妊娠高血压综合征用药分析课件.pptx
- 药理学入门:孕妇家庭用药安全课件.pptx
- 药理学入门:家庭常用抗过敏药课件.pptx
- 联合资信 -2025年应收账款ABS市场分析——规模攀升质稳前行,主体多元创新迭出.docx
- 联合资信 -2025年不动产ABS市场分析.docx
原创力文档

文档评论(0)