基本概念:
1、地址(c语言):C语言地址,是指内存地址的概念。计算机内存中的各个存储单元都是有序的,按字节编码。字节是最小的存储单位。(故数组中每个元素的地址总比前一个大。)
2、指针(Point):利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。指针参考了存储器中某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的动作。
3、指针变量:存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。
4、 定义指针变量的一般形式如下:类型名*指针变量名1,*指针变量名2,... *指针变量名n ;
5、 空指针:空指针是一个特殊的指针,它的值是0,C语言中用符号常量NULL(在stdio.h中定义)表示这个空值,并保证这个值不会是任何变量的地址。空指针对任何指针类型赋值都是合法的。一个指针变量具有空指针值表示当前它没有指向任何有意义的东西。
6、 void指针:(void *)类型的指针叫通用指针,可以指向任何的变量,C语言允许直接把任何变量的地址作为指针赋给通用指针。但是有一点需要注意void*不能指向由const修饰的变量,eg const int test; void * ptv; ptv = &test;第三句是非法的,只有将ptv申明为const void * ptv;上述第三句(ptv = &test),才是合法的.
当需要使用通用指针所指的数据参加运算时,需要写出类型强制转换。如通用指针ptv 所指空间的数据是整型数据,p是整型指针,用此式转换:p=(int *)ptv ;
附1:在低级语言,汇编语言中是直接通过地址访问内存单元的,在高级语言中一般使用变量名访问内存单元,但C语言作为高级语言提供了通过地址访问内存单元的方式。
附2:在程序代码中是通过变量名对内存单元进行存取操作的,但是代码经过编译后已经将变量名转换为地址,对变量存取操作都是通过地址进行的。