C中这个基于单一的索引技巧是否安全?

pyr*_*kie 2 c

我看到有人这样做的数组索引从1开始,而不是从C开始.

a = (int *) malloc(sizeof(int)*3) - 1
Run Code Online (Sandbox Code Playgroud)

这有什么风险吗?

Que*_*tin 10

理论风险:只有空指针和指向,对象或对象之后的指针才有效.其他指针在使用时触发未定义的行为(如果它们悬空)或通过指针算法创建它们.

实际风险:由随机代码审查员获取.

  • `malloc`必须在这种情况下进行转换,因为它返回一个`void*`,你不能对`void*`做指针运算. (2认同)