娓娓道来c指针 (0)c语言的梦魇:c指针
(0)c语言的梦魇:c指针
序
c语言中有一个重点:c指针。它也是一个难点。当然,这是一句废话:重点往往也是难点。在c标准中,对指针的定义是这种:
- 指针的类型是derived from其他类型,也就是说指针的类型是由它指向的类型决定的;
- 指针是一种reference类型,即引用类型;
c指针似乎非常难理解,以至于有人指出:掌握了c指针,就掌握了c语言的精髓。本系列就来聊聊c指针,要想弄懂c指针。光就指针本身进行理解,还不够。
由于指针的本质就一句话:指针就是地址。这句话大多数学过c语言的人都明白,但对非常多使用指针的场景仍然是不知所措,就像梦魇一样。必须指出:指针之所以难理解,很多其它地在于c的语法。能够明白指出c的语法非常多时候是不太自然的,混乱的。毕竟c语言是人设计的,有所缺陷或者说设计不佳,在所难免。
这并非否定c语言的魅力和能力。相反,c语言的确是强大的,在底层的操作上或许仅次于汇编。但要想发挥出c语言的强大能力,前提是必须对语言本身有深刻的理解。从c语言的发展史看,c语言起源于B语言,接着演化为New B,简称NB,再就是今天的c语言。c语言就是一门介于NA和NC之间的语言!
本系列集中探讨下面问题:
- 指针和数组为何如此暧昧?
- c语言中变量的可见域、生存期
- 变量的左值、右值
- 什么是静态函数?
- c语言中的复杂申明怎样解析?
- 数组的数组是什么意思?
- const的使用
- typedef是用来干什么的?
- 结构体的使用
- ……
个人能力有限,估计本系列会非常艰难。但能往前走一步,就绝不走半步。本系列以c指针为中心,加以c的语法解析。欢迎各路高手批评指正。
David
2014年7月23日
文件夹
娓娓道来c指针 (0)c语言的梦魇:c指针的更多相关文章
- windev中的内存机制及其与C语言中的内存指针相似性(一)
windev中的内存机制,是初入windev世界必须要越过的一道高山,以下我的理解和经验未必都对,如有错误或遗漏,以后再纠正或补充!另外,以下内容,咱先谈应用,再说对机制的认识和理解. 一.新建表单, ...
- C语言回滚(三)-指针
#include <stdio.h>#include <stdlib.h> //& 地址运算符 //* 间接运算符 // *的作用 当*后面跟一个指针名或地址的时候, ...
- 【C语言】14-返回指针的函数与指向函数的指针
前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...
- 【转载】C/C++语言void及void指针深层探索
C/C++语言void及void指针深层探索 1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述vo ...
- 1、C语言中的函数指针
一 通常的函数调用 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun ...
- 0.0C语言重点问题回顾
左值和右值得区别:左值是用来表明变量的身份的,右值更加侧重于值本身: void*是个例外,它只有基地址没有类型信息,所以无法解引用. int *p = malloc(100); char *s = m ...
- C语言中的函数指针
C语言中的函数指针 函数指针的概念: 函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...
- 【C语言探索之旅】 第二部分第二课:进击的指针,C语言的王牌!
内容简介 1.课程大纲 2.第二部分第二课: 进击的指针,C语言的王牌 3.第二部分第三课预告: 数组 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...
- C语言精要总结-指针系列(一)
考虑到指针内容繁多,这里将指针作为一个系列,从简入繁,一点一点深挖并掌握这C语言的精华.初步计划如下 此文为指针系列第一篇: C语言精要总结-指针系列(一) 内存与地址 我们可以把内存看做一排连续的房 ...
随机推荐
- 遇见Lambda
转自:http://www.cnblogs.com/allenlooplee/archive/2012/07/03/2574119.html 在学习generate时候发现C++中的匿名函数,上面博文 ...
- 利用Linux系统函数alarm() 来检测计算机性能
大家都知道,alarm() 是Linux系统自带的定时函数,操作系统管理进程时为每个进程分配了一个定时器,下面利用1秒钟定时,看计算机能计数多少来判断计算机的性能: #include<stdio ...
- [翻译]Django速查表
原文在此:https://code.djangoproject.com/wiki/DjangoCheatSheet Django速查表Django教程已经非常好了.这个速查表的作用是创建一个快速开始指 ...
- Iframe知识点
var oIframe=document.getElementById('iframe1'); 获取iframe对象: oIframe.contentWindow.// iframe 里的win ...
- Qt在windows 平台操作保存execel的表格(通过QAxObject来操作)
粗略操作 QT += core gui sql CONFIG += qaxcontainer greaterThan(QT_MAJOR_VERSION, 4): QT += widgets #incl ...
- 雪佛兰Suburban_百度百科
雪佛兰Suburban_百度百科 雪佛兰Suburban
- How many integers can you find(容斥+dfs容斥)
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- AWS要进入中国了
去年底就开始有这个传言见诸于某些媒体,说网站支持中文了要进中国了,也有说这不代表什么是谣言 这几天又听到有消息说比较靠谱就半年内的事儿 其实如果没有政策阻碍的话进中国是迟早的事情,原因如下 Amazo ...
- 在storyboard中设置控件的layerbordercolor
在SB中控件可以在SB中直接利用kvc 设置一些属性值,不如layerwidth等 但是不能更改和颜色有关的属性因为layerbordercolor是CGColor.通过为CALayer增加属性可以实 ...
- Redis 突然报错 NOAUTH Authentication required
查找相关资料,说是添加了密码 只需要在redis的配置文件redis.conf中开启requirepass就可以了,比如我设置我的访问密码是mypassword requirepass mypassw ...