【发布时间】:2013-06-03 05:29:47
【问题描述】:
如果我给一个指针加1,实际加的值是指针指向的类型的大小吗?例如:
int* num[5];
cout << *num << ", " << *(num + 2) << endl;
这将打印存储在 num[1] 和 num[2] 的值, 所以 num + 2 实际上是 num + 2*sizeof(int) 如果我没记错的话。
现在,如果我将一个指向 char 的指针数组初始化为字符串字面量,就像这样:
char* ch[5] =
{
"Hi",
"There",
"I,m a string literal"
};
这是可以做到的,因为像“hi”这样的字符串文字表示它的第一个字符的地址,在本例中是“h”。现在我的问题是我怎样才能写出类似的东西:
cout << *(ch + 2);
并得到“I,m a string literal”作为输出? 由于指针指向 char,实际上不应该向指针添加 2 (ch + 2*sizeof(char)) 吗?给我输出“那里”?
和cout有关系吗? cout 是否搜索指向值的内存以查看它是否找到 '\0' 将指向值的内容识别为字符串,然后修改指针算术?但是,将 1 添加到指向字符串的 char 的指针将意味着每次添加不同数量的字节(而不是 char 的大小),因为字符串可以是任意大小。还是我完全错了?对不起,我是 C++ 新手,并且是普通编程。
【问题讨论】:
-
num + 2 实际上是“num + sizeof(int)*2”,或者更准确地说是 (int*) ((char*)num + sizeof(int)*2)