了解char引用

nki*_*int 10 c++ pointers reference

我写了这个简单的脚本来理解引用是什么,并且我被卡在char数组上.

int numbers[5] = {3, 6, 9, 12, 15};

for (int i = 0; i < 5; i++)
{
    cout << numbers[i] << endl;
    cout << &numbers[i] << endl;
}

cout << "--------------" << endl;

char letters[5] = {'a', 'b', 'c', 'd', 'e'};

for (int i = 0; i < 5; i++)
{
    cout << letters[i] << endl;
    cout << &letters[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

3
0xbffff958
6
0xbffff95c
9
0xbffff960
12
0xbffff964
15
0xbffff968
--------------
a
abcde
b
bcde
c
cde
d
de
e
Run Code Online (Sandbox Code Playgroud)

使用int数组,当我使用时&numbers[i],我会收到一个奇怪的数字,它是一个内存位置.还行吧; 这正是我所理解的.

但是char,我不明白为什么我有这个输出.

Gre*_*ill 13

原因是cout"知道"如何处理char *值 - 它将字符串打印为NUL终止的C字符串.

这同样不是一个真正的int *价值,所以cout打印指针值来代替.

您可以通过强制转换强制指针值输出:

cout << static_cast<void *>(&letters[i]) << endl;
Run Code Online (Sandbox Code Playgroud)