gcc将char *和char附加为原始指针(“str”+“c”)

时间:2012-01-18 17:10:23

标签: c++ gcc g++

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 +时。我想可能会禁用自动连接并找到所有这些位置(在遗留代码中)。但大多数情况下,我只是想找到行为的确切文档。

2 个答案:

答案 0 :(得分:3)

ccc + t中,t被视为整数。净效应是res指向ccc加上84个字节,其中84是'T'的ASCII代码。

值得指出的是ccc + t纯粹在指针上运行,并且不触及实际的字符串。我这样说是为了预期"Test" + 'T'可能字符附加到字符串中 - 但事实并非如此。

答案 1 :(得分:1)

它被称为指针算术。例如,ptr + x相当于&ptr[x]