易截截图软件、单文件、免安装、纯绿色、仅160KB

【C\C++语言入门篇】 数组与指针

前面一篇我们介绍了指针,相信大家对指针不再是那么陌生,虽然在一些大胆的指针强制类型转换上有的读者还不习惯。但是至少大家心里有个数,指针式如此的灵活,以至于你可以操作得比较底层或者根本越过一些语法的限制。这可能也是众多程序员抨击CC++不安全的因素之一。安不安全不是本文想要表达的,这里只需要记住一点,如果你有足够把握,那么你绝对可以毫不犹豫的运用。
本文依然不会离开指针的影子,前面一篇还有没介绍完的,之前本来想在前面一篇介绍,但是发现在本篇介绍更适合一些。数组和指针可以说是两家亲,很多初学的读者对这两者的概念模棱两可。他们之间有什么联系和区别也是很多初学的读者最希望明白的,本文就为解决这个困扰,让指针和数组进一步加深。还是记住我们的出发点,以发散的思维去理解去联想。注重思考过程,这个过程最终只需要用程序来表达而已。
首先还是看看什么是数组,数组即是一段连续的空间(内存空间)。从这句话中,我们可以注意到数组其实就是一段空间,而且还是连续的。好了,此时对数组的基本特征就有个大致的了解了。那么内存空间是怎么样表达出来的呢?很简单:
int    a[ 100 ];
char szName[ 16 ];
这两句即为数组了,在这里a为一个拥有100个int类型元素的数组。在这里我们也可以理解int并不是数组a的类型,而是数组内部元素的类型。它表示数组内部每个元素都是32有符号整数。这样想来便联系到了指针,int* p; p代表它指向的内存地址里存放的数据是int型的。第二个szName同理也表示其每个元素的类型就是char型。这样理解对指针数组和数组指针有帮助,先放这里容后介绍。
这里a和szName并没有被初始化,那么它们里面每个元素的值我们可以认为是乱码。也就是说是随便填充的一些值。当然为什么填充这些值也是有道理的,在不同的平台可能填充的值不一样。在windows下通常被填充成类似0xcdcdcdcd或者0xcccccccc之类的。这些值在汇编层面上去理解会更直接,在这里我们就认为它是随便填充的一些值吧。就认为这些值对于我们正常的程序是没有什么用处的。
从程序表现上我们已经知道数组的声明,那么怎么跟指针联系和区别呢?先贴代码:
int* p = a;   // 这里a使用上面的a[ 100 ]数组。
我们从前一篇只可以知道,这时指针p指向了数组a的首地址,这里直接将a赋值给了p。那么可以断定这个数组名a即是代表数组的首地址。既然代表的是首地址,那么a可以看成是一个指向这1


相关文档:

C/C++语言编程修养1(转)

什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?
我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对
于速度快,只要编得多也就熟能生巧了。
 
我认为好的程序员应该有以下几方面的素质:
 
  1、有专研精神,勤学善问、举一反 ......

C/C++语言编程修养2

21、goto语句的使用
—————————
 
N年前,软件开发的一代宗师——迪杰斯特拉(Dijkstra)说过:“goto statment is
harmful !!”,并建议取消goto语句。因为goto语句不利于程序代码的维护性。
 
这里我也强烈建议不要使用go ......

定义C/C++全局变量/常量几种方法的区别

在讨论全局变量之前我们先要明白几个基本的概念:
1. 编译单元(模块):
    在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用g ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号