C语言中的指针(二)
指针指向谁,就把谁的地址赋给指针,指针变量和指针指向的内存变量是不一样的。不停的给指针赋值,相当于是不断的改变指针的指向。
在开发中要避免野指针的存在,在指针使用完毕之后,记得要给指针赋值成为NULL。
*就像一把钥匙,拿着指针变量中的地址区修改对应内存中的数值。
指针做函数参数是学习C语言中的核心内容。
间接赋值的三个条件
1,存在两个变量,
2,进行取地址赋值
3,,用*p来进行内存空间内容的修改。
指针的输入特性和输出特性。
字符串的两头堵模型。
字符串指向的内存空间如果是在常量区是不能进行修改的,如果想进行修改,就要显示的分配内存空间才可以
用const修饰指针。
每次进行递归调用的时候,都会将函数参数入栈。
关于递归有两点需要掌握:
递归参数的入栈模型
函数嵌套调用返回模型。
在进行递归调用的时候,一定要清楚哪些参数是不变的,哪些参数是变化的。
二级指针的内存模型:
二级指针做输入和输出模型
二级指针的第一种内存模型
在分配内存的时候,记得一定要free掉,同时避免野指针。将指针变量置成NULL。
指针做输出,被调用函数分配内存。
二级指针做输入的三中模型。
二级指针做输入的第一种内存模型:
指针数组,是数组,类型是指针变量。char * buf[] = {"abc","123","dfg"}。类似于这一种方式。基本操作就是排序或者是打印输出类似这一种的操作。
第二种内存模型:
问题的本质,就是,第二种内存模型和第一种内存模型的内存模型不一样,指针所指向的内存空间的数据类型是不一样的。
就是二维数组变量,不过二级指针变量会退化成为一级指针变量问题。
不能使用地中内存模型中的方式来求取元素的个数,因为第二种方式是一次性的分配指定大小的内存空间,可是你病并不一样对一次性的使用完全。
编译器只会关心有多少行,每行有多少列,关心这个就是关系步长的问题。
第三种内存模型:
自己定义内存空间,就是所谓的按需打造内存空间。其实和第一种模型没有他大的区别。
理解递归的两点
1、参数的入栈模型
2、函数的返回流程
关于C语言中的const,是优点区别的,最重要的一点就是区分指针类型和指针指向的变量空间是不同的概念。
多级指针避免野指针
数组类型,数组指针类型,指针数组类型。
多维数组名和一个指向数组类型的指针变量是类似的。
多维数组名的本质就是一个数组指针,每次跳一维数组的长度大小。
数组在作为函数参数的时候会退化成为一个数组指针。
在分配好内存之后习惯将内存数据置为0,这是为了更好的释放内存空间。便于判断是否对内存进行了操作。
C语言中的指针(二)的更多相关文章
- 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组
学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...
- C语言中的指针加减偏移量
C语言指针偏移技巧(也是一个要注意的坑) - 陈杰柱的博客 - CSDN博客 https://blog.csdn.net/cjzjolly/article/details/82116772 C语言中 ...
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- C语言中的指针数组
C语言中的指针数组是什么,像 char *a[]={"ddd","dsidd","lll"}; 这里讲一下注意如果我们使用了a也就是首元素的 ...
- 【ZZ】C 语言中的指针和内存泄漏 & 编写高效的C程序与C代码优化
C 语言中的指针和内存泄漏 http://www.ibm.com/developerworks/cn/aix/library/au-toughgame/ 本文讨论了几种在使用动态内存分配时可以避免的陷 ...
- GO语言中的指针
http://www.tizgrape.com/?p=100 Go语言中的指针语法和C++一脉相承,都是用*作为符号,虽然语法上接近,但是实际差异不小. Go使用var定义变量: var v6 *in ...
- C语言中的指针笔记
C语言指针 得到变量的地址 可以使用&运算符找到变量保存在内存中的位置 int x = 1; printf("x的内存地址是"%p\n",&x) %p格式 ...
- 论C语言中二级指针和二维数组之间的区别
刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...
- C语言中的指针和内存泄漏
引言 对于任何使用C语言的人,如果问他们C语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但是 ...
随机推荐
- Java函数的基本知识
http://blog.csdn.net/cxwen78/article/details/7322891主要从Java函数的定义,函数的特点,函数的应用,函数的重载四个方面来讲解Java函数. 一.函 ...
- VueJS计算属性: computed
computed属性 HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"&g ...
- robotframework使用之RIDE的底部的日志没显示怎么办?
问题:RIDE的底部的日志没显示怎么办? 解决办法:在Python27的安装路径下D:\Python27\Lib\site-packages\robotide\contrib\testrunner下的 ...
- MP4文件格式的解析,以及MP4文件的分割算法
http://www.cnblogs.com/haibindev/archive/2011/10/17/2214518.html http://blog.csdn.net/pirateleo/arti ...
- 开始nodejs+express的学习+实践(1)
开始nodejs+express的学习+实践(1) 开始nodejs+express的学习+实践(2) 开始nodejs+express的学习+实践(3) 开始nodejs+express的学习+实践 ...
- java利用爬虫技术抓取(省、市(区号\邮编)、县)数据
近期项目须要用到 城市的地址信息,但从网上下载的xml数据没有几个是最新的地址信息.....数据太老,导致有些地区不全.所以才想到天气预报官网特定有最新最全的数据.贴出代码,希望能给有相同困惑的朋友. ...
- HDFS中数据节点数据块存储示例
数据块在数据节点上是按照如下方式存储的. 首先是一个存储的根目录/Hadoop/data/dfs/dn,如下图所示: 接着进入current目录,如下图所示: 再进入后续的BP-433072574-1 ...
- C++第4次实验(提高班)—继承和派生1
从项目2和项目3中选1题作为实验.剩下2题写成作业. [项目1 - 龙三] 请在以下程序的横线处填上适当内容,以使程序完整,并使程序的输出为: Name: 龙三 Grade: 19 #include ...
- 跟着实例学习设计模式(6)-生成器模式builder(创建型)
生成器模式是创建型设计模式. 设计意图:将一个复杂的类表示与其构造相分离,使得同样的构建过程可以得出不同的表示. 实例类图: IVehicleBuilder:抽象建造者.为创建一个Vehicle对象并 ...
- Notepad工具使用小技巧
工欲善其事必先利其器 Notepad++是个很不错的文本编辑工具,掌握它的使用技巧可以提高我们工作的效率.见如下: 比较常用的罗列如下:(如果有更好的建议可以留言哈) 1: 添加书签 CTRL+F2 ...