博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二级指针
阅读量:6978 次
发布时间:2019-06-27

本文共 958 字,大约阅读时间需要 3 分钟。

记住两句话,函数传递有值传递和地址传递,要想修改某个内容的值,必须传递指向这块内容的地址。

这就引起了关于指针的最基本的两个内容:是修改指针还是修改指针指向的值,

前者需要将指针的地址(也就是二级指针呗)传递给函数,后者则只需要指针本身即可。

要想在函数中修改他们的值,就要传递他们的地址。

例1:

void foo(char* p)      {          p++;      }

  问,在这个函数执行完,返回之后,p的值会被改变吗?

答案是否,因为我们传递指针的目的是为了修改指针指向的地址的值,而不是指针的值,

  那么,如果想在函数里修改指针的值该怎么做?只要把指向指针的指针传进来就可以了

如下

void foo(char** p)  {      *p++;  }    foo(&pointer);

    例2:

char str[10] = "wang"     void change(char *p)     {         p = str;     }     int main()     {         char *p = NULL;         change(p);     printf("%s",p);//打印出来应该还是空,不会是wang.    }

我们想在函数change()中改变指针p的值(记住:是指针p的值,而不是p所指向的地址的值)。问什么不能实现呢?首先,函数的参数是char *p,我们可以改变 *p,但改变不了p本身。

   说得易懂点就是,是把p改变了,但改变的是函数中的局部变量p,当函数结束时,局部p被释放了,其实也只是主函数p的一个拷贝,所以没有改变。

要想改变,就要用到上面所以写的方法,传递二维指针,例子修改一下,e.g:

void change(char **p)     {         *p = na;     }     int main()     {         char *p = NULL;         change(&p);         printf("%s",p)//这回打印出来的就是wang了。     }

转载于:https://www.cnblogs.com/Lune-Qiu/p/9295033.html

你可能感兴趣的文章
sizeof(Vector<>)大小问题
查看>>
[转]理解 Delphi 的类(十一) - 深入类中的方法[10] - 构造方法与析构方法
查看>>
文件的读取和写出
查看>>
POJ NOI MATH-7826 分苹果
查看>>
二、安装桌面——Linux学习笔记
查看>>
Linq之Linq to XML
查看>>
[Asp.net]Uploadify所有配置说明,常见bug问题分析
查看>>
[转]如何创建一个自签名的SSL证书(X509)
查看>>
linux stat命令参数及用法详解
查看>>
软件架构自学笔记-- 转载“虎牙在全球 DNS 秒级生效上的实践”
查看>>
大S变"汪太"!与汪小菲注册结婚
查看>>
使用命令行操作MySQL 及 语法
查看>>
linux常用命令
查看>>
相互递归(2)
查看>>
ubuntu16.04----jdk---install----config
查看>>
css背景图片位置:background的position(转)
查看>>
Django REST framework+Vue 打造生鲜电商项目(笔记四)
查看>>
那些堪称神器的 Chrome 插件
查看>>
html头部标签大全之header/meta/link
查看>>
英文单词记录
查看>>