返回信息流程序里有一段是这样的:
char *bp[BUFFERSIZE]
int bytes;
.............
.............
bp+=bytes;
......
......
不知道这样运算的结果是什么样的一个类型?
这是一条镜像帖。来源:北邮人论坛 / cpp / #32395同步于 2009/11/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
字符型和整型数相加是什么?
tomharold
2009/11/30镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
这不是字符型……是指针
int bytes大约是偏移量?控制指针偏移量的?
【 在 tomharold (Tomharold) 的大作中提到: 】
: 程序里有一段是这样的:
: char *bp[BUFFERSIZE]
: int bytes;
: ...................
char *bp[BUFFERSIZE]
这里bp是一个数组,数组元素的类型是 char*
所以bp += bytes 在编译是肯定会报错,因为数组名bp是不能被赋值的
我在gcc-4.3编译的错误类型如下,它是由"对数组名赋值"引起的:
error: incompatible types in assignment
LZ如果想要编译通过的话,可把bp改为如下类型
char (*bp)[BUFFERSIZE];
它表示bp是一个指针,指向的类型是char数组
不过这可能要牵一发而动全身了,其他地方的逻辑也要更改
【 在 jokerlee 的大作中提到: 】
: bp是char *指针类型,不是字符类型,
: bp+=bytes 等价于 &bp[bytes],运算结果还是一个char *字符指针
唔,看成char *bp了...
如果是char *bp[BUFFERSIZE], 那bp就是一个数组名, 不能进行指针运算 bp+=bytes肯定是错误的。如果bp当做函数参数传递后退化成 char **后就可以进行指针运算了
bp是一个包含BUFFERSIZE个元素的数组,数组元素类型是char *,一般情况下数组名会被转换成指向数组首元素的常量指针。
结合本例,由于数组元素是char *类型,所以bp应该是char **类型。
bp不是char **类型, 而是 char*数组类型
C语言中数组是一个单独的类型, 和指针是两个完全不同的类型
只是在参数传递的时候会自动退化
我知道buptljl兄的意思, 不过还是忍不住要提醒下, 呵呵.
【 在 buptljl 的大作中提到: 】
: bp是一个包含BUFFERSIZE个元素的数组,数组元素类型是char *,一般情况下数组名会被转换成指向数组首元素的常量指针。
: 结合本例,由于数组元素是char *类型,所以bp应该是char **类型。