c - C 中强制转换指针的含义

标签 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++);

我无法理解循环的条件,将指针强制转换为 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/

相关文章:

c - 传递函数指针 - 类型问题

c - 我的 C 程序有什么问题

c - 队列 - "dereferecing pointer to incomplete type"

c++ - 修改指针在 C++ 函数中指向的位置

c++ - 如何为 MyClass** 传递 MyClass[][]?

c - 开关盒中的枚举

c - 在 LGPL 代码中包含 GPL header

arrays - C 将指针传递给堆栈上的数组

c - 迭代迭代字符串数组(指针值似乎得到 "stuck")

c - 用于接受和打印字符串的非常小的 C 程序中的段错误