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