C语言中数组的一个最后一个值的问题,对过来人简单

来源:百度知道 编辑:UC知道 时间:2024/05/18 02:08:28
char buffer[100];
char *pbuffer=buffer;
while((*pbuffer++=getchar())!='\n')
if(pbuffer==buffer+99)
break;
这个代码我书上摘得,其中的if(pbuffer==buffer+99)这个没搞清楚,是把他们的地址比较吗,我觉得是这样的,问题是下面的东东:
while((*pbuffer++=getchar())!='\n')
if(pbuffer==buffer-1+sizeof buffer)
break;
if(pbuffer==buffer-1+sizeof buffer)这句就看不懂了,谢谢大家解答
buffer-1是说明什么

buffer-1说明buffer是首地址,即&buffer[0];
不减1的话,buffer+100==&buffer[100],数组下标就越界了。
形象一点讲,如果有2个数1,2;
通过1得到2,你不能用1+2,那就是3了;
要用1-1+2。

sizeof buffer是计算buffer这个数组的字节数;
而buffer有100个char型元素;
那么sizeof buffer计算出来的就是100*(一个char占的字节数)

sizeof (char)计算出来的值是1,因为理论上char应该占一个字节;

综上,sizeof buffer实际计算出来的就是数组长度。在这里也就是100

1:if语句主要是判断是否超过了数组设置的长度,buffer是buffer这个数组的首地址,
2:这句其实跟上面的+99那句实现的是同样的功能。
sizeof buffer是求buffer这个数组的长度,他的值就是100,