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语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但是 ...
随机推荐
- Linux 编译ffmpeg 生成ffplay
本来主要介绍linux环境下如何编译ffmpeg使之生成ffplay.编译总是离不开源码的版本,以及编译环境下:编译环境Ubutun 16.04 ,ffmpeg 版本3.4.2.如何下载ffmpeg ...
- uwsgi报错:listen queue of socket ...
Linux默认的socket链接为128,uwsgi默人的链接为100 需要修改系统默认的配置参数, 然后修改uwsgi配置:listen参数:1024
- jQuery 标签切换----之选项卡的实现
这一次,我自己写了代码,先看html部分: <div class="tab"> <div class="tab_menu"> <u ...
- 五分钟了解 Service Mesh
1 背景 1.1 多语言 微服务理念是提倡不同业务使用最适合它的语言开发,现实情况也确实如此,尤其是AI的兴起,一般大型互联网公司存在 C/C++.Java.Golang.PHP.Pyth ...
- Jenkins:使用Git Parameter插件实现tag或分支的选择性构建
Jenkins如何选择任意一个tag来构建代码 Jenkins如何选择任意一个branch(分支)来构建代码 苦恼了一段时间后,发现Git Parameter插件实现可以帮助我们来实现. 下面来介绍如 ...
- python 基础 7.0 import 导入
一. python 常用内置模块的使用(datetime,logging,os,command) 在日常的开发工作中,我们要写很多的python 代码,如果都写在一个文件中,会导致代码特别 ...
- Notepad工具使用小技巧
工欲善其事必先利其器 Notepad++是个很不错的文本编辑工具,掌握它的使用技巧可以提高我们工作的效率.见如下: 比较常用的罗列如下:(如果有更好的建议可以留言哈) 1: 添加书签 CTRL+F2 ...
- 九度OJ 1168:字符串的查找删除 (查找)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4276 解决:1699 题目描述: 给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串. 输入: 输入只有1 ...
- Python中的staticmethod和classmethod
谈谈Python中的staticmethod和classmethod 首先值得说明的是staticmethod和classmethod都是python中定义的装饰器,用的时候需要在前面加@ 即@sta ...
- 怎样拆分View Controller进而实现轻量级的View Controller[UIKit]
參考文章来自objcio站点 为什么要编写轻量级的View Controller?? 1.作为iOS项目中最大的文件,ViewControllers中的代码复用率差点儿是最低的 2.重量级的V ...