1 / 22
文档名称:

指针使用方法.doc

格式:doc   大小:138KB   页数:22页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

指针使用方法.doc

上传人:mh900965 2018/3/18 文件大小:138 KB

下载得到文件列表

指针使用方法.doc

文档介绍

文档介绍:
   
    指针变量的赋值运算有以下几种形式:
    :
    int a;
    int *ip=&a;
    。例如:
 int a;
int *ip;
ip=&a;             //把整型变量a的地址赋予整型指针变量ip
 
    。例如:
 int a;
int *pa=&a;
int *pb;
pb=pa;              //把a的地址赋予指针变量pb
    由于pa,pb均为指向整型变量的指针变量,因此可以相互赋值。
    。例如:
 int a[5],*pa;
pa=a;               //数组名表示数组的首地址,故可赋予指向数组的指针变量pa
也可写为:
pa=&a[0];           //数组第一个元素的地址也是整个数组的首地址也可赋予pa
当然也可采取初始化赋值的方法:
int a[5],*pa=a;
    以上是一些基本的数组赋值方法,后面我们会详细讨论指针在数组中的使用。
    。例如:
 char *pc;
pc="c language";
或用初始化赋值的方法写为:
char *pc=" c language ";
    这里应说明的是并不是把整个字符串装入指针变量, 而是把存放该字符串的字符数组的首地址装入指针变量。
    。例如:
    int (*pf)();
    pf=f;                //f为函数名
   
    对于指向数组的指针变量,,则ip+n,ip-n,ip++,++ip,ip——,——ip 运算都是合法的。指针变量加或减一个整数n的意义是把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。应该注意,数组指针变量向前或向后移动一个位置和地址加1或减1 在概念上是不同的。因为数组可以有不同的类型, 各种类型的数组元素所占的字节长度是不同的。如指针变量加1,即向后移动1 个位置表示指针变量指向下一个数据元素的首地址。:
 char a[20];
int*ip=a;
...
ip++;
    在上例中,指针ip的类型是int*,它指向的类型是int,,指针ip被加了1,编译器是这样处理的:它把指针ip的值加上了sizeof(int),在32位程序中,,故ip所指向的地址由原来的变量a的地址向高地址方向增加了4个字节。
    由于char类型的长度是一个字节,所以,原来ptr是指向数组a的第0号单元开始的四个字节,此时指向了数组a中从第4号单元开始的四个字节。再看如下例子:
 char a[20];
int*ip=a;
...
ip+=5;
    在这个例子中,ip被加上了5,编译器是这样处理的:将指针ip的值加上5乘sizeof(int),在32位程序中就是加上了5乘4=,故现在的ip所指向的地址比起加5后的ip所指向的地址来说,向高地址方向移动了20个字节。在这个例子中,没加5前的ip指向数组a的第0号单元开始的四个字节,加5后,ptr已经指向了数组a的合法范围之外了。虽然这种情况在应用上会出问题,但在语法上却是可以的。这也体现出了指针的灵活性。
    如果上例中,ip是被减去5,那么处理过程大同小异,只不过ip的值是被减去5乘sizeof(int),新的ip指向的地址将比原来的ip所指向的地址向低地址方向移动了20个字节。
    总结一下,一个指针ipold加上一个整数n后,结果是一个新的指针ipnew,ipnew的类型和ipold的类型相同,ipnew所指向的类型和ipold所指向的类型也相同。ipnew的值将比ipold的值增加了n乘sizeof(ipold所指向的类型)个字节。就是说,ipnew所指向的内存区将比ipold所指向的内存区向高地址方向移动了n乘sizeof(ipold所指向的类型)个字节。
    一个指针ipold减去一个整数n后,结果是一个新的指针ipnew,ipnew的类型和i

最近更新