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语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但是 ...
随机推荐
- HTTP基础(分析两个例子)
两个例子(一个get,一个post)(一个是访问页面,一个是提交修改后的博文): preferences.aspx:(header)(文件) 1. Remote Address:42.121. ...
- 导出txt格式的说明书
/// <summary> /// 说明书 /// </summary> /// <returns></returns> public FileResu ...
- Java 命名规则
http://lpacec.iteye.com/blog/25180包名:包名是全小写的名词,中间可以由点分隔开,例如:java.awt.event; 类名:首字母大写,通常由多个单词合成一个类名,要 ...
- 检验 java 基础数据类型参数传递方式
测试证明,java基础数据类型参数传递值虽是引用传递但是值不会改变.对象是引用传递,值会改变. 为什么?找到一段话来解释这个问题. "对于字符串对象来说,虽然在参数传递的时候也是引用传递,但 ...
- 【Union Find】JAVA implementation
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Scan ...
- AndroidX86模拟器Genymotion的一些使用和另一款Andy模拟器
命令行启动虚拟机 当我们下载安装好,可以通过命令行运行指定名字模拟器 D:\ProgramFiles\Genymobile\Genymotion\player --vm-name "Sam ...
- javascript onclick中post提交
对post提交进行封装: function post(URL, PARAMS) { var temp = document.createElement("form"); temp. ...
- (翻译) Container Components
react.js javascript 这篇文章翻译自Medium的一篇文章:Container Components 选择这篇文章翻译的原因是,在刚接触React的时候,这篇文章很好的指引我了解 ...
- Double类parseDouble()和valueOf()方法的区别
数字类型的String字符串转换为浮点数通常采用parseDouble()和valueOf()方法, 两者主要是存在以下两点区别. 区别一:参数区别Double.parseDouble(java.la ...
- Javaweb之 servlet 开发具体解释1
1.1 Tip:Servlet简单介绍 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发 ...