`
weiyinchao88
  • 浏览: 1235068 次
文章分类
社区版块
存档分类
最新评论

C语言中的二级指针(双指针)

 
阅读更多

二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。

下面讲解C中的二级指针的使用方法。

例如我们使用指针来交换两个整型变量的值。

错误代码如下:

一级指针

  1. #include<stdio.h>
  2. voidswap(int*a,int*b)
  3. {
  4. int*tmp=NULL;
  5. tmp=a;
  6. a=b;
  7. b=tmp;
  8. }
  9. intmain(intargc,char**argv)
  10. {
  11. inta=2;
  12. intb=3;
  13. printf("Beforeswapa=%db=%d\n",a,b);
  14. swap(&a,&b);
  15. printf("Afterswapa=%db=%d\n",a,b);
  16. return0;
  17. }

输出的结构如下:


结果分析:不论是数值还是指针,swap函数中的参数传递的是总是值,所以在上述函数中即使a和b的地址已参数传递给swap函数,而在函数内交换的是a和b的值(main函数中a的地址和b的地址),而交换完毕,函数相应的参数从栈中弹出,并不能返回给调用函数,所以该swap函数中的操作是徒劳。可怜

这里完全可以直接交换a和b的值,不过如果a和b不是一个32位的整型变量,而是一个复杂的数据结构,这样做会降低效率。如下;

  1. voidswap(TYPE*a,TYPE*b)
  2. {
  3. TYPEtmp;
  4. tmp=*a;
  5. *a=*b;
  6. *b=tmp;
  7. }



二级指针

下面是使用二级指针分配内存的例子

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. voidmemorylocate(char**ptr)
  5. {
  6. *ptr=(char*)malloc(10*sizeof(char));
  7. }
  8. intmain(intargc,char**argv)
  9. {
  10. char*buffer;
  11. memorylocate(&buffer);
  12. strcpy(buffer,"12345");
  13. printf("buffer%s\n",buffer);
  14. return0;
  15. }


当想改变指针的值的时候不妨考虑使用二维指针。


分享到:
评论

相关推荐

    C语言指向指针的指针

    在C语言中,二级指针的定义需要两个星号(*),如下所示: ```c int **p2 = &p1; ``` 这里,p2是一个二级指针,它指向一级指针p1。要访问p1指向的变量a的值,我们需要通过p2两次解引用(即使用两个*号): ```c ...

    c语言指针之二级指针示例

    ### C语言指针之二级指针详解 #### 一、二级指针概念解析 在C语言中,指针是一个非常重要的概念,它主要用于处理内存地址。...以上是对C语言中二级指针概念及应用的一个较为详细的解释,希望对你有所帮助。

    C语言中的指针学习 C语言中的指针学习

    例如,通过二级指针可以在函数间共享并修改指针的值,从而实现更高效的数据处理和内存管理。 总之,C语言中的指针是理解和控制程序内存的关键工具。通过深入学习和实践,程序员能够充分利用指针的功能,编写出更加...

    C语言二级指针(指向指针的指针)_C语言中文网1

    当需要访问二级指针所指向的一级指针中的数据时,需要用两个星号来解引用,如`**p2`。 在给出的代码示例中,我们看到如何定义和使用这些不同级别的指针: ```c int a = 100; int *p1 = &a; int **p2 = &p1; int ***...

    C语言中二级指针的实例详解

    C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = 5; int *p1 = &a; //-打印地址-----地址相同--------------- printf(&a = %p\n, &a);//...

    Linux运维-嵌入式物联网开发教程-C语言使用二级指针方式控制二维数组.mp4

    Linux运维-嵌入式物联网开发教程-C语言使用二级指针方式控制二维数组.mp4

    【C语言】两个指针的坑

    在C语言和C++语言中,指针是用来直接访问内存的一种方式。指针在使用不当的情况下非常容易出现问题,尤其是内存越界、野指针(未初始化或者已经释放的指针)、空指针访问等,都会造成程序的运行时错误,甚至导致程序...

    简析C语言指向指针的指针

    但在实际开发中,我们通常只会用到一级指针和二级指针,而三级以上的指针则比较少见。 在获取指针指向的数据时,根据指针的级数,我们需要使用相应数量的星号(*)来解引用。例如,如果有一个三级指针p3指向一个二级...

    c语言二级指针操作操作讲解视频

    c语言二级指针操作操作讲解视频

    C语言指针详解 C语言指针详解

    ` 这是一个二级指针,`p`是一个指针,它指向一个`int`指针。这意味着`p`可以存储另一个指向`int`类型数据的指针的地址。 3. `int (*p)[3];` 这里的`p`是一个指针,但它不直接指向一个`int`,而是指向一个包含三个`...

    C语言指针大全+指针实例解析

    - **多级指针**:二级或多级指针,如`int **pp`,可以用来指向指针变量,形成间接访问内存的能力。 3. **指针与数组** - **数组名作为指针**:数组名实质上是首元素的地址,因此可以被当作指针处理,如`int arr[5...

    如何掌握C语言中数组_指针与地址相互关系.pdf )

    在C语言中,数组、指针与地址的关系是学习C语言的重要组成部分,它们构成了C语言的特色和难点。数组是一种构造类型数据,由相同类型的元素按照...在准备C语言二级考试时,对这部分内容的熟练掌握是提高应试能力的关键。

    c语言:我眼中的指针(教你彻底认识指针)

    在C语言中,指针是一种非常重要的数据类型,它能够存储内存地址,是进行高效内存管理的关键工具。本文将从多个角度深入探讨指针的概念及其应用,帮助读者建立起对指针的全面认识。 #### 二、什么是指针? 在C语言...

    C语言二级真题

    "C语言二级真题"这个压缩包文件包含了历年的考试题目,可以帮助学习者了解C语言的考试模式,检验自己的学习成果,并通过实践来巩固C语言的知识。 1. **基本语法** C语言的基础包括变量、数据类型、常量、运算符、...

    二级C语言资料全国二级 河南省二级

    题库中的题目可能会涉及到条件语句(if-else)、循环(for, while, do-while)、函数定义与调用、数组操作、指针的使用(如动态内存分配、指针运算、二级指针等)、结构体与共用体、位运算等。考生需要对每个知识点...

    指针数组与数组指针与二级指针

    本篇文章将深入探讨指针数组、数组指针以及二级指针这三种概念。 首先,我们要理解基本的指针概念。指针是变量的地址,当我们声明一个指针变量时,例如`int *p`,我们是在定义一个可以存储整型变量地址的指针。通过...

    C语言二级C语言二级C

    这个压缩包文件“二级C语言二级C语言”包含了针对这种考试的真题集,以TXT文件格式提供,方便考生进行复习和模拟练习。 C语言的特点和知识点: 1. **基本语法**:C语言的语法结构严谨,包括变量声明、数据类型(如...

    C语言二级(apk)

    C语言二级是Android客户端目前最全面的免费离线C语言二级考试参考书籍,主要内容包括: 1、C语言的结构 2、数据类型及其运算 3、基本语句 4、结构程序设计 5、循环结构程序设计 6、数组的定义和引用 7、函数、...

Global site tag (gtag.js) - Google Analytics