C语言中转换指针的意义
我有以下代码C语言中转换指针的意义,c,pointers,C,Pointers,我有以下代码 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++); inta[
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++);
inta[5]={20,-90450,-37,87};
int*p;
对于(p=a;(char*)p而言,该转换的目的是确保在向指针添加sizeof(int)
时,它会添加正确的字节数
最好不要使用强制转换,也不要使用sizeof
。指针算法已经可以为您做到这一点了
如果一开始就编写可读的代码会更好。;-)
编辑:
我也会考虑使用这样的条件来解决数组大小变化的关注:
p < (a+ (sizeof(a) / sizeof(a[0])))
不管有什么疯狂的理由
(char*)p
说让我们把p
当作指向char的指针
(char*)a
对a
也有同样的说法
sizeof(int)*5是一个表示5int
因此,(char*)p共享代码的功能如何?强制转换的目的是让您一次迭代数组一个字节,而不是一次迭代一个int-仅此而已…@PaulR我希望*p++以sizeof(int)而不是以sizeof(char)递增指针哦,是的-我的错-在这种情况下,强制转换是毫无意义的,代码可以编写得更简单,非常感谢你。这就是我在考试中需要解决的问题:(在实时情况下,我不应该这样写,这让我发疯,为什么要教它呢??!再次感谢你
/tmp/foo.c:9:11: warning: unsequenced modification and access to 'p'
[-Wunsequenced]
*p++ = ++*p<60?*p:0;
^ ~
1 warning generated.