如何判断一个指针到结尾了?

wtjd 2009-09-02 10:18:27
比如
1, 数组,int a[],如何计算该数组的长度?,指针a可以用a++这样遍历数组吗?

2,字符指针 char*p ="hello", ,如何计算这个字符串的长度?指针p可以用p++这样遍历这个字符串吗?
...全文
979 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wtjd 2009-09-04
  • 打赏
  • 举报
回复
原来是这么回事
对于 int a[],a不是指针,是数组名,数组名是一个不可修改的左值,因此不能进行a++这样的运算。

而指针p是一个可修改的左值,因此可以p++这样运算,字符串的长度是从首字符起一直到结束符'\0'之前的字符个数。
wtjd 2009-09-03
  • 打赏
  • 举报
回复
顶一下,
guoqing2009 2009-09-03
  • 打赏
  • 举报
回复
貌似a是常量,进行改变操作
mstlq 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 supermegaboy 的回复:]
引用楼主 wtjd 的回复:
比如
1,  数组,int a[],如何计算该数组的长度?,指针a可以用a++这样遍历数组吗?

2,字符指针 char*p ="hello",  ,如何计算这个字符串的长度?指针p可以用p++这样遍历这个字符串吗?


int a[]叫不完整类型,在其类型被补充完整之前,该对象的大小是未知的,补充完整的方法,可以有例如初始化:int a[] = { 10, 30, 40 };这样a就被补充完整为int[3]了。

对于 int a[],a不是指针,是数组名,数组名是一个不可修改的左值,因此不能进行a++这样的运算。

而指针p是一个可修改的左值,因此可以p++这样运算,字符串的长度是从首字符起一直到结束符'\0'之前的字符个数。
[/Quote]
正解O(∩_∩)O~
飞天御剑流 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 wtjd 的回复:]
比如
1,  数组,int a[],如何计算该数组的长度?,指针a可以用a++这样遍历数组吗?

2,字符指针 char*p ="hello",  ,如何计算这个字符串的长度?指针p可以用p++这样遍历这个字符串吗?
[/Quote]

int a[]叫不完整类型,在其类型被补充完整之前,该对象的大小是未知的,补充完整的方法,可以有例如初始化:int a[] = { 10, 30, 40 };这样a就被补充完整为int[3]了。

对于 int a[],a不是指针,是数组名,数组名是一个不可修改的左值,因此不能进行a++这样的运算。

而指针p是一个可修改的左值,因此可以p++这样运算,字符串的长度是从首字符起一直到结束符'\0'之前的字符个数。
blackbillow 2009-09-02
  • 打赏
  • 举报
回复

int main(int argc, char *argv[]) {
int a[] = {1, 2, 3, 4};
a++;
return 0;
}


$ gcc test.c
test.c: In function 'main':
test.c:3: error: lvalue required as increment operand


blackbillow 2009-09-02
  • 打赏
  • 举报
回复
a++不可以,a是一个常量
ziqingwushuang 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mstlq 的回复:]
1.在a还是数组名,还没退化成指针之前,可以用sizeof(a)计算长度,a++可以
2.strlen,长度5,可以p++
[/Quote]
sizeof(a) 计算的结果是:该数组的元素类型的长度*元素个数;
sizeof(a[0])得到该数组元素类型的长度,所以sizeof(a)/sizeof(a[0])得到数组元素的个数;可以a++遍历数组
strlen(p) 结果是5,因为strlen 计算的时候会忽略掉末尾的null,可以p++遍历数组
fiveyes 2009-09-02
  • 打赏
  • 举报
回复
看到不少人都用这个,应该是不错的:


int len = sizeof(a)/sizeof(a[0]);


但是也有人遇到这个问题,值得警惕:
http://topic.csdn.net/u/20080701/14/82d55579-2cab-49f8-b824-a2a5d3c76267.html
mstlq 2009-09-02
  • 打赏
  • 举报
回复
1.在a还是数组名,还没退化成指针之前,可以用sizeof(a)计算长度,a++可以
2.strlen,长度5,可以p++
herman~~ 2009-09-02
  • 打赏
  • 举报
回复
sizeof(a)计算长度

strlen
richarddahn 2009-09-02
  • 打赏
  • 举报
回复
学习,学习~~
wtjd 2009-09-02
  • 打赏
  • 举报
回复
up

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧