C语言中arr[1/2u]的含义及函数接收的结构体数组位置问询
问题解答
1. 函数接收的元素位置
在C/C++中,1 / 2u属于整数除法,两个整数运算会直接舍去小数部分,结果为0。因此&arr[1/2]等价于&arr[0],get_transaltion函数接收的是结构体数组arr中索引为0的元素(即第一个元素)的地址。
2. 修改data数组未达预期的原因
你代码里的1 / 2u同样是整数除法,结果为0,所以实际修改的是arr[0].data的三个元素,而非你可能预期的其他位置元素。
如果你的目标是修改索引为1的元素,直接写arr[1].data[0]即可;如果是想基于浮点除法计算索引,需要先将操作数转为浮点类型,比如arr[(int)(1.0 / 2)](但这个计算结果还是0,需根据实际需求调整数值)。
你的代码片段:
struct vector { float data[3]; }; arr[1 / 2u].data[0] = 1 + 0.1; arr[1 / 2u].data[1] = 1 + 0.2; arr[1 / 2u].data[2] = 1 + 0.3;
内容的提问来源于stack exchange,提问作者Ino
相关产品推荐
相关产品推荐

