0

完全披露:这是家庭作业。我只是对其中的一部分感到困惑。我在 C++ 程序中有这段代码:

char * charArray = new char[100];

//fill charArray 
char c = '.';
for(int i=0; i<100; i++)
{
    charArray[i] = c;
    c = c + 1;
}
cout <<"Char Array: " << endl;
for(int i=0; i<100; i++)
{
    cout << "Type: Char @ " << &charArray[i] << " = " << charArray[i] <<endl;
}

在我的程序的不同点,我有几乎完全相同的代码,但它不是一个 char 数组,而是一个浮点数组。当我打印出浮点数组时,我得到 Type: Float @ whatAppearsToBeAProperMemoryAddress = correctFloat#。

但是,尽管字符是正确的,但地址似乎并不正确。char 数组的地址如下所示:./0123456789< =>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz{|}~?????????????????? /0123456789<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_[]^_abcdefghijklmnopqrstuvwxyz{|}~?????????????????????

....一路到?? ?

所以很明显,我没有得到地址,而是得到了不同程度的数组内容。我很困惑,任何指针都将不胜感激。这是我第一次破解 C++。

4

1 回答 1

2

因为&charArray[i]仍然是char*指向字符串的第 i 个字符。所以它被用作一个完整的字符串。尝试这样转换:

(void*)&charArray[i]

这与以下内容相同:

(void*)(charArray+i);
于 2013-10-24T05:13:40.157 回答