我有以下代码
int a[5] = {20,-90, 450, -37,87};
int *p;
for(p=a; (char *)p <((char*)a+sizeof(int)*5 );) // this line I don't understand
*p++ = ++*p<60?*p:0;
for(p=a; (char *)p <( (char*)a+sizeof(int)*5 );)
printf("\n%d", *p++);
我无法理解循环的条件,将指针强制转换为 char * 是什么意思? 会发生什么?
(我知道循环体的作用)
非常感谢
最佳答案
该转换的目的是确保当您将 sizeof(int)
添加到指针时,它会添加正确的字节数。
最好放弃 Actor 阵容,并放弃sizeof
。指针算术已经为您完成了此操作。
如果一开始就编写可读的代码就更好了。 ;-)
编辑:
我还会考虑使用这样的条件,来解决对数组大小变化的担忧:
p < (a+ (sizeof(a) / sizeof(a[0])))
使用 sizeof(a[0])
还可以在数组类型发生变化时保护您。
另请注意,代码会产生以下警告:
/tmp/foo.c:9:11: warning: unsequenced modification and access to 'p'
[-Wunsequenced]
*p++ = ++*p<60?*p:0;
^ ~
1 warning generated.
关于c - C 中强制转换指针的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21714143/