考试网 >> IT认证 >> 等级 >> 等级动态 >> C语言笔记 第三章 运算符&和*

C语言笔记 第三章 运算符&和*

发布时间:2006-07-25 11:56     点击:
分页:[1] 2  下一页

第二章  指针的算术运算

指针可以加上或减去一个整数。指针的这种运算的意义和通常的数值的加减

运算的意义是不一样的。例如:

例二:

1。 char a[20];

2。 int *ptr=a;

...

...

3。 ptr++;

在上例中,指针ptr的类型是int*,它指向的类型是int,它被初始化为指向整

形变量a。接下来的第3句中,指针ptr被加了1,编译器是这样处理的:它把指针

ptr的值加上了sizeof(int),在32位程序中,是被加上了4。由于地址是用字节做

单位的,故ptr所指向的地址由原来的变量a的地址向高地址方向增加了4个字节。

由于char类型的长度是一个字节,所以,原来ptr是指向数组a的第0号单元开始的

四个字节,此时指向了数组a中从第4号单元开始的四个字节。

我们可以用一个指针和一个循环来遍历一个数组,看例子:

例三:

例三:

int array[20];

int *ptr=array;

...

//此处略去为整型数组赋值的代码。

...

for(i=0;i<20;i++)

{

(*ptr)++;

ptr++;

}

这个例子将整型数组中各个单元的值加1。由于每次循环都将指针ptr加1,所

以每次循环都能访问数组的下一个单元。

再看例子:

例四:

1。 char a[20];

2。 int *ptr=a;

...

...

3。 ptr+=5;

在这个例子中,ptr被加上了5,编译器是这样处理的:将指针ptr的值加上5

乘sizeof(int),在32位程序中就是加上了5乘4=20。由于地址的单位是字节,故

现在的ptr所指向的地址比起加5后的ptr所指向的地址来说,向高地址方向移动了

20个字节。在这个例子中,没加5前的ptr指向数组a的第0号单元开始的四个字节

,加5后,ptr已经指向了数组a的合法范围之外了。虽然这种情况在应用上会出问

题,但在语法上却是可以的。这也体现出了指针的灵活性。

如果上例中,ptr是被减去5,那么处理过程大同小异,只不过ptr的值是被减

去5乘sizeof(int),新的ptr指向的地址将比原来的ptr所指向的地址向低地址方
分页:[1] 2  下一页
版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
发表评论: 匿名发表 用户名: 查看评论
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容
本站提醒:不要进行人身攻击。谢谢配合。
在本站搜索相关信息
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有