内存的每一个字节有一个编号,这就是“地址”。
整型变量占用4字节,第1个字节的地址管理着4字节内存。同样,float、long型变量的第1字节地址也管理着自己的4字节内存。double变量的第1字节地址管着自己的8字节内存,字符型变量只有1个字节,它的地址只管理1个字节内存。
内存每一个字节的“地址”无法管理多少字节,只有变量的地址才能够知道管理了多少字节,这就是变量地址的特点,具有这个特点的地址叫作指针。
指针变量:将普通变量地址作为“数据”保存的变量叫作指针变量。保存有普通变量地址的指针变量称为“指向”变量。指针变量声明为:
int*p; //p只能指向整型变量,指针的这个类型称为“基类型”
指针与地址运算符:
& ——取指针运算符,取变量的地址,该地址具有类型。例如:
double a=3.14,*p;
p=&a;
* ——间接访问运算,*p就是变量a。*p不一定是“读”,而应当解释为“访问”。通过指针所保存的地址和类型访问其指向的内存,决定从那个字节开始并访问多少字节,以及其中的数码是什么类型的数据。这就是指针为什么有类型的原因。
指针变量可以运算:*p=*p+1; //等价于 a=a+1;
2.变量、数组、字符串、函数的指针及指针的引用
1)如何让指针指向变量?
int m,*q; q=&m; //q的基类型与变量m的类型相同。
2)一维数组、字符串与指针的关系
数组的名字是一个指针,且是常量指针。
字符串用数组存储时,其数组名也是指针,字符串常量实际是用一个无名数组存储的,其起始位置的地址就是它的指针。例如
double data[20];
char st[20]=“I am a boy.”;
char *p=“Hello,world!”;
但是,数组名是简单的指针,指向数组的第1个元素。如果使用间接运算“*数组名”,其只能访问数组的第1个元素。要想访问其他元素,要借助其他方法。
*(数组名+i)或数组名[i](www.xing528.com)
是通过“基地址+偏移量”的方法访问数组各个元素。
指针变量、数组的关系如图4.1所示。
图4.1 指针变量、数组的关系
3.函数参数是指针的应用
定义:int dt[15],n=7;
变量n是为了表明数组里的实际数据,也是为了保证利用“基地址+偏移量”访问数组数据时不越界。当给函数传递数组名时,一般也要传递这个数据。
例4.1 指针应用。
如果输入4,10,输出结果为10,4。
4.函数返回值是指针的应用
void * malloc(字节数);
用来申请字节数的内存,返回无(空)类型指针,使用时由编程人员强制转换为所需类型。例如:
5.指针数组的应用
指针数组:数组的元素都是指针。其一般用于字符串数组。
例4.2 指针数组应用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。