C编程:如果我在将Arraypointer作为参数传递时递增它会发生什么

时间:2017-04-19 16:10:37

标签: c

这会有用吗? 我希望

@Column(length = 65535, columnDefinition = "text")
private String biography;

相同
foo(myArraypointer + 10);

对于大多数编译器来说,它会被视为相同吗?这被认为是好的还是坏的做法,为什么?可能出现什么问题?

3 个答案:

答案 0 :(得分:4)

对于任何指针或数组a和索引i,表达式a[i]等于*(a + i)。这意味着&a[i]等于&*(a + i),其中最后一个可以缩短为a + i

答案 1 :(得分:2)

它们与C标准所要求的完全相同。请注意,编译器在获取其地址之前不得评估数组索引:即即使数组元素未初始化,表达式也已明确定义。

我更喜欢第一个。它更清晰,对C ++代码更友好,可能会为您的类型重载运算符的地址。我已经做过的非初始化点实际上就是酒吧测验。

答案 2 :(得分:0)

它们都与第一个foo(myArraypointer + 10);中的相同,它访问myArraypointer这是变量的基地址,+ 10将地址从基地址增加到第10个位置。 递增或递减指针的地址取决于指针Variable的数据类型。即如果指针是字符类型,它将递增/递减1。 如果myArraypointer指向地址为1000的字符,则递增1将指向位置1001,但如果myArraypointer指向一个地址为1000的整数,则递增1将指向该位置1002(1000 + 2)。对于漂浮也像这样。