c语言指针的指针
c语言在函数传递时常常使用如下的形式。
void get(int **p)
对于这个形式,我想过为什么不能够使用 *p 作为形参呢。下面我们看一下代码和执行结果
void get(int **p) { printf("%p\n",*p); *p = (); printf("%p\n",*p); } int main() { int *ptr = NULL; printf("%p\n",ptr); get(&ptr); printf("%p\n",ptr); ; }
由这个结果可以看出一开始ptr初始化为NULL,后面经过get()函数以后ptr的指针为00511448,包括后面的函数退
出以后ptr的值也是00511448 。但是下面指传入指针的结果相比较,我们就可以发现问题了。
void get(int *p) { printf("%p\n",p); p = (); printf("%p\n",p); } int main() { int *ptr = NULL; printf("%p\n",ptr); get(ptr); printf("%p\n",ptr); ; }
在上面的结果看出来,函数结束以后,ptr的值为00000000了,不再和上面的结果一样。
从这里我们可以看出来问题了。传入的是指针的值,值是可以改变的。所以在后面函数结束以后ptr的值就被改变
了。如果后面我们需要用到这个指针,那么得到的结果就是错误的,是不可靠的 ;所以我们需要向函数中传递一
个地址,然后在函数结束后,内部分配的地址就依然存在并且ptr指向这个地址,可以使用。!!!!
c语言指针的指针的更多相关文章
- 解读 C 语言中的指针
我想对很多学习C语言的新手来说,指针无疑是一个难点.但是,我觉得指针也是C语言特别重要的一个特性.也许,你在除了C和C++以外的编程语言中,很少看到指针.而C++中,也多用引用,而非指针.指针,作为一 ...
- Swift3.0语言教程使用指针创建和初始化字符串
Swift3.0语言教程使用指针创建和初始化字符串 Swift3.0语言教程使用指针创建和初始化字符串苹果的Swift团队花了不少功夫来支持C的一些基础特性.C语言中为我们提供了指针,Swift也不例 ...
- C语言中的指针数组
C语言中的指针数组是什么,像 char *a[]={"ddd","dsidd","lll"}; 这里讲一下注意如果我们使用了a也就是首元素的 ...
- 深入理解C语言中的指针与数组之指针篇
转载于http://blog.csdn.net/hinyunsin/article/details/6662851 前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本 ...
- 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
C 语言中的指针和内存泄漏 http://www.ibm.com/developerworks/cn/aix/library/au-toughgame/ 本文讨论了几种在使用动态内存分配时可以避免的陷 ...
- 深入理解C语言中的指针与数组之指针篇(转载)
前言 其实很早就想要写一篇关于指针和数组的文章,毕竟可以认为这是C语言的根本所在.相信,任意一家公司如果想要考察一个人对C语言的理解,指针和数组绝对是必考的一部分. 但是之前一方面之前一直在忙各种事情 ...
- C语言中的指针学习(小黑板)
指针是C语言中的精华所在,也是C语言的危险之在,今天又重现温习了一下C语言,做了一下总结. 欢迎批阅. (1)指针的含义指针的本质也是数据类型,它是指向地址的变量.例如: { int a = 10; ...
- GO语言中的指针
http://www.tizgrape.com/?p=100 Go语言中的指针语法和C++一脉相承,都是用*作为符号,虽然语法上接近,但是实际差异不小. Go使用var定义变量: var v6 *in ...
- 由链表初始化看C语言的二级指针
先来看C语言创建链表.插入节点和遍历链表的一段代码: #include <stdio.h> #include <stdlib.h> typedef int ElemType; ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
随机推荐
- C可变参数
https://www.cnblogs.com/pengdonglin137/p/3345911.html#_label0
- Linux命令 标签: linux 2016-08-01 10:26 508人阅读 评论(0) 收藏
Linux常用命令 文件.目录的基本操作 ls - 查看文件 cp - 拷贝文件 mv - 移动或重命名文件 rm - 删除文件 touch - 创建空文件或更新文件时间 cd - 改变当前路径 pw ...
- 对于char *s1 和 char s2[] 的认识
对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误. char *s1 = "hello"; char s2[] = " ...
- nginx导致的session丢失的解决方法
nginx把同一用户的请求分发到了不同的服务器,如果不做处理,就会导致session丢失. 1.粘性IP: 在nginx配置文件中,增加配置, 对IP进行HASH后,散列到服务器. 这个实现最简单.但 ...
- slf4j-api-1.5.8.jar
资源介绍: 详细说明:slf4j-api-1.5.8.jar,jsp开发中使用FCK编辑器,要用到一个jar包-slf4j-api-1.5.8.jar, jsp development using t ...
- Ajax三级联动操作的js代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Django 模型中DateField字段
DateField¶ class DateField([auto_now=False, auto_now_add=False, **options])¶ 这是一个使用Python的datetime.d ...
- cannot be resolved解决方法
引言: eclipse新导入的项目经常可以看到“XX cannot be resolved to a type”的报错信息.本文将做以简单总结. 正文: (1)jdk不匹配(或不存在) 项目指定的jd ...
- swift的clourse:字面量化的函数、将函数字面量化-与函数的类型签名相同
1.clourse的签名与函数的签名相同: 所以两者可以相互赋值: 2.可以将函数(表达式)字面量化: 因为可以字面量化,所以和其它的值(变量)没有任何区别,可以存在变量存在的任何地方: 3.clou ...
- Html5的本地储存 Web Storage
Html5 中的存储包括两种:sessionStorage 和 localStorage sessionStorage 用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话 ...