“12345”+ 2在C中做什么?
我之前在C中看过这个 :
#define MY_STRING "12345" ... #define SOMETHING (MY_STRING + 2)
在这里,SOMETHING扩展到了什么? 这甚至合法吗? 或者他们是这个意思?:
#define SOMETHING (MY_STRING[2])
字符串文字存在于程序的固定数据段中,因此它们在编译器中显示为一种指针。
+-+-+-+-+-+--+ |1|2|3|4|5|\0| +-+-+-+-+-+--+ ^ MY_STRING ^ MY_STRING + 2
当你有一个数组或指针时, p+x
相当于&p[x]
。 所以MY_STRING + 2
相当于&MY_STRING[2]
:它产生字符串中第三个字符的地址。
注意添加0时会发生什么MY_STRING + 0
与&MY_STRING[0]
,两者都与编写MY_STRING
相同,因为字符串引用只不过是指向字符串中第一个字符的指针。 令人高兴的是,身份操作“添加0”是一个无操作。 考虑一下这种心理unit testing,我们可以用它来检查我们关于+
均值是正确的想法。