gcc将char *(例如“STRING”)和char(例如“C”)添加为指针的原因是什么?
const char *ccc = "Test1";
const char t = 'T';
const char *res = ccc + t;
printf("%s, %p, %d, %p\n", res, ccc, t, res);
输出
, 0x8048d97, 84, 0x8048deb
我的意思是,您能指出文档,标准规范或文章吗?我可以控制或禁用此行为吗?
UPD:为什么我会问及出乎意料的是,那是
CString() + 'c'
作为
(char*)CString() + (char)char_var
当编译器找不到合适的operator +时。我想可能会禁用自动连接并找到所有这些位置(在遗留代码中)。但大多数情况下,我只是想找到行为的确切文档。
答案 0 :(得分:3)
在ccc + t
中,t
被视为整数。净效应是res
指向ccc
加上84个字节,其中84是'T'
的ASCII代码。
值得指出的是ccc + t
纯粹在指针上运行,并且不触及实际的字符串。我这样说是为了预期"Test" + 'T'
可能将字符附加到字符串中 - 但事实并非如此。
答案 1 :(得分:1)
它被称为指针算术。例如,ptr + x
相当于&ptr[x]
。