aihot  2020-11-12 10:28:13  OpenCV |   查看评论   
); } *n=sign*(*n); if(c!=EOF) ungetch(c); return c; }

5.3 指针与数组

数组名实际就是一个地址,因为可以用指针的偏移来代表数组元素的地址:p=&a[0];a[i]=*(p+i);

但是值得注意的是指针它是一个变量,可以执行赋值,自增等操作,但是数组名是一个常量。

当数组作为参数调用函数时,实际上传入的数组的地址,因此跟指针实际上是等价的:f(char array[]) 等价于f(char * array).

5.4 地址算术运算

有效的指针运算包括相同类型指针之间的赋值运算;指针同整数之间的加法或减法运算;指向相同数组中元素的两个指针间的减法或比较运算;将指针赋值为0或指针与0之间的比较运算。其他所有形式的指针运算都是非法的,例如两个指针间的加法、乘法、除法、移位或屏蔽运算;指针同float或double类型之间的加法运算;不经强制类型转换而直接将指 
向一种类型对象的指针赋值给指向另一种类型对象的指针的运算(两个指针之一是void*类型的情况除外)。

下面通过一个缩小版本的内存分配来说明指针的这些算术运算。

#include<stdio.h> #define BUFSIZE 1000 static char buf[BUFSIZE]; static char * pbuf=buf; char *alloc(int n) {     if(buf+BUFSIZE-pbuf>=n)     {         pbuf=pbuf+n;         return pbuf-n;     }     else         return             
          
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自《TCPL》 第5章 指针与数组

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]