首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

浅谈数组跟指针

2013-02-24 
浅谈数组和指针这应该不是议数据和指针,应该是阅读笔记吧!但是其这个题目更好点。C专家编程第四章内容:令人

浅谈数组和指针
     这应该不是议数据和指针,应该是阅读笔记吧!但是其这个题目更好点。      C专家编程第四章内容:令人震惊的事实:数组和指针并不相同。自己也收获不小,了解很多基础的东西,对那些初入C开发人员有很好的帮助。那废话少说吧。     我们总以为数据和指针是完全等同的,两者是可以互换的,这种说法是片面的。我们在编程中经常使用全局变量,在其他文件中声明中也可以使用这个全局变量。下面就举个例子说明:

文件1:

Int mango[100];

文件2:

Extern int *mango;  /**/

...

/*一些使用mango的代码*/      这里,文件1定义int 变量mango,但文件2声明它为指针int *型,这里显然是类型不匹配,也说明了数组和指针并不是完全等同的。这样使用肯定是错误的,代码不可能正常运行。那么应该怎么声明呢, 如下:

Extern int mango【】;/**/

说明: ①语句声明mango是个int*型;②声明mango为int 型数组,长度尚未确定,其存储在别处定义。

     

   1  那么什么是声明?什么是定义?        在C语言中对象必须有且只有一个定义,但可以有多个声明。定义是一个特殊的声明,它创建一个对象;声明只是说明了在其他地方创建了这个对象,它允许在这里使用:*******************************************************************************定义     只能出现在一个地方  确定对象的类型并分配内存,用于创建新的对象声明     可以多次出现        描述对象的类型,用于指代其他地方定义的对象*******************************************************************************    只要记住下面的内容可以分清定义和声明:声明相当于普通的声明:它说明的并非自身,而是描述其他的地方创建的对象。定义相当于特殊的声明:它为对象分配内存。       Extern 对象声明告诉编译器对象的类型和名字,对象的内存分配在别处进行。由于并未在声明中为数组分配内存,所以并不需要提供关于数组长度的信息。对于多维数组需要提供除最左边一维其他维的长度—这是给编译器足够的信息产生相应的代码。   2 、数组和指针式如何访问的     这里讲述对数组的引用和对指针的引用有何不同之处,首先需要注意的是“地址y“和“地址y的内容”之间的区别。这里一个相当微妙之处,是在大多数编程语音中我们用同一个符号来表示这两个东西,有编译器根据上下文环境来判断他的具体含义。以一个简洁的例子来说明:

    浅谈数组跟指针

      出现在赋值符左边的符号有事被称为左值(由于它位于“左手边”或“表示地点”),出现在赋值符右边的符号有时则被称为右值(由于它位于右手边)。编译器为每个变量分配一个地址(左值),这个地址在编译时可知,而且该变量在运行时一直保存于这个地址。相反,存储于变量中的值(右值)只有在运行时才知。如果需要用到变量中存储的数值,编译器就发出质量从指定地址读取变量并将它存储在寄存器中。      这也是为什么在if(-1 == x)判断语句中,如果将“==”误写为“=”编译器会报警的原因(相信很多人只知道这么用,不知道为什么吧?)    这里的关键在于每个符号在编译时可知。所以如果编译器需要一个地址(可能还需要加上偏移量)来执行某种操作。它可以直接进行操作,并不需要增加指令首先取得具体的地址,相反对于指针在运行时首先取得它的当前值,然后才能对它进行接触引用操作。具体看下图:

网络太卡了,上传不上图片,以后再写吧!。。。

 

热点排行