C语言中的指针(一)
指针也是一种数据类型,占用内存空间,内存中存储的只能是变量的地址。
*p是操作内存的意思,在声明成为指针变量的时候使用*,在使用指针的时候,*表示操作内存。
*p放在等号的左边,相当于是从内存中取值,*p放在内存的右边,相当于是想内存中写值
*就像一把钥匙,通过一个地址,找到一块内存空间,来间接的修改内存中的值。
指针变量和它指向的内存变量是不同的概念。
不断的给指针赋值,相当于不停的改变指针的指向。
修改指针所指向的内存空间的数据,要保证这个内存空间是可以被修改的。举个例子就是修改常量区的内存
指针也是一种数据类型,指针的数据类型指的是它指向内存空间的数据类型。
指针的数据类型决定了指针的步长。
在执行程序的时候,C编译器会提前将所有的变量都分配出来,然后在执行相应的函数调用。
两个指针共享一个内存块,是语言的精华。
C语言中字面常量,也即是0,没有放在堆区中或者是栈中,也就是所谓的宏定义。字面常量是不能取地址的。
间接赋值是指针存在的最大意义,这样就允许了被调用函数操作主调函数中的内存,或者是主调函数可以接受被调用函数分配的内存地址。
间接赋值是指针存在的最大意义。
指针做函数参数 ,可以进行模块的划分。
函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,来改变实参,把运算结果传出来。这个是指针做函数的精华。
理解指针必须和内存四区概念相结合,分清楚主调函数和被调函数。
指针的输入和输出特性:
输入特性,值得是在主调函数中分配内存,将内存传递给被调用函数,这种用法叫指针的输入。
输出特性,在被调用函数中分配内存,然后供主调用函数使用,或者修改主调函数中的内存。
应用指针必须和函数结合起来使用。
一级指针主要有两种表现,一种是一维数组,另外一种是字符串。
C风格的字符串是以0结尾的字符串,在C语言中,没有字符串这种类型,字符数组模拟字符串。
字符串的内存分配,可以在堆上,可以在栈上,也可以在全局区。
字符数组的初始化:
指定长度的:char buf[100] = {'a','b','c','d'};如果个数大于内存的个数,会编译错误。否则,编译器其他后面的会自动补成0,可以通过打印后面的值来查看是否为0
不指定长度的:char buf[] = {'a','b','c','d'};初始化的个数会由编译器自动生成。由于这个字符串不是以0结尾的,因此,不是一个C风格的字符串。
用字符串来初始化字符数组,字符串后面默认会有一个‘\0’
char buf[] = "abc";buf中有4个内存,作为字符数组,应该有4个字节,作为字符串应该有3个字节,可以分别通过sizeof和strlen来求得。
char buf[100] = "abc";后面的也会全部都变成0,这些都是编译器的行为。
数组是一种数据类型。只不过是一种复杂的数据类型而已,可以通过sizeof来张量出数据类型所占的内存空间的大小。
中括号和指针之间的关系。数组名表示的是数组元素的首地址,是一个常量指针。目的是为了在析构内存的时候,编译器可以使用这个指针来释放对应的内存资源。
为了能保证局部变量的内存的首地址的安全性,编译器在设计的时候就讲数组首地址设计成为了一个常量。
一级指针的内存模型,最为经常的就是字符串和数组类型。
字符串做函数参数,就是在主调函数中分配内存,在被调用函数中进行字符串的具体处理,比如说查找或者是统计。
++的优先级要高于*的优先级,也就是说++和*都是一种操作,后缀++是先进行其他运算,然后在将其进行++操作
在字符串进行拷贝的时候,一定不要忘记了字符串最后的'\0'。
在进行指针赋值的时候,一定要保证提前分配内存,没有内存,就没有地址,没有地址,就没有指针变量。
多多判断,就是在使用别人传递过来的参数的时候,一定要判断是否满足要求,如果不满足要求就不能往下继续执行,这样才能防止错误数据带来的后续影响。
不要轻易改变形参的值,要引进一个辅助变量,将形参的值给接过来,以后都是通过辅助变量来进行对应的操作。
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语言指针偏移技巧(也是一个要注意的坑) - 陈杰柱的博客 - CSDN博客 https://blog.csdn.net/cjzjolly/article/details/82116772 C语言中 ...
- C 语言中的指针和内存泄漏
引言对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧 ...
- C语言中的指针和内存泄漏
引言 对于任何使用C语言的人,如果问他们C语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但是 ...
- C语言中的指针学习(小黑板)
指针是C语言中的精华所在,也是C语言的危险之在,今天又重现温习了一下C语言,做了一下总结. 欢迎批阅. (1)指针的含义指针的本质也是数据类型,它是指向地址的变量.例如: { int a = 10; ...
- [C]C语言中的指针和内存泄漏几种情况
引言 原文地址:http://www.cnblogs.com/archimedes/p/c-point-memory-leak.html,转载请注明源地址. 对于任何使用C语言的人,如果问他们C语言的 ...
- 论C语言中二级指针和二维数组之间的区别
刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...
随机推荐
- Android加载网络图片学习过程
好多应用,像我们公司的<乘友>还有其他的<飞鸽><陌陌><啪啪>这些,几乎每一款应用都需要加载网络图片,那ToYueXinShangWan,这是比须熟练 ...
- QTreeWidget 的用法
Qt QTreeWidget 新建一个Qt Widgets Application,拖拽一个Tree Widget 到 ui 界面上,最后实现的效果如下: 添加代码 //test.h //在头文件里添 ...
- HDU 2473 Junk-Mail Filter 删点并查集
题目来源:pid=2473">HDU 2473 Junk-Mail Filter 题意:2中操作 M x, y 将x,y 合并到一个集合 S x 将x从所在的集合去掉 自己成为一个集合 ...
- 说说我的web前端之路,分享些前端的好书(转)
WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没有学校的正规教育,大多数人都是靠自己自学成才.本文主要介绍自己从事web开发以来(从大二至今)看过的书籍和自己的成长过程,目的是给想了解Java ...
- Python结合NC.exe 实现模拟登录&批量填表
1.工作需求 有很多事项,每个事项分为:名称.种类.时间等,需要把每个事项逐个输入到网页中并提交. 如果用人肉操作的话,流程就是先登录到网站后台,点击“添加”——>输入各项内容——>点击“ ...
- 分布式服务框架 Zookeeper(一)介绍
一.概述 ZooKeeper(动物园管理员),顾名思义,是用来管理Hadoop(大象).Hive(蜜蜂).Pig(小猪)的管理员,同时Apache Hbase.Apache Solr.LinkedIn ...
- 【特征匹配】SIFT原理与C源代码剖析
相关: KD树+BBF算法解析 SURF原理与源代码解析 SIFT的原理已经有非常多大牛的博客上做了解析,本文重点将以Rob Hess等人用C实现的代码做解析,结合代码SIFT原理会更easy理解.一 ...
- android 集成QQ互联 (登录,分享)
参考:http://blog.csdn.net/syz8742874/article/details/39271117 http://blog.csdn.net/woblog/article/deta ...
- Codeforces Round #316 (Div. 2) (ABC题)
A - Elections 题意: 每一场城市选举的结果,第一关键字是票数(降序),第二关键字是序号(升序),第一位获得胜利. 最后的选举结果,第一关键字是获胜城市数(降序),第二关键字是序号(升序) ...
- 点聚-weboffice 6.0 (一)
WebOffice是一款由北京点聚信息技术有限公司提供的完全免费(商业用途也免费)且功能强大的在线Word/excel/wps编辑辅助控件,可以实现:1.在线编辑Word.Excel.PPT.WPS. ...