char*notes [] = {"Ab","F#","B","Gb","D"}的混淆; 和char**

day*_*yup 4 c++ pointers

我真的很困惑这种类型的指针定义:

char *notes[] = {"Ab", "F#", "B", "Gb", "D"};`. 
Run Code Online (Sandbox Code Playgroud)

我理解notes这里是一个指向char的指针数组,我理解为注释'元素应该都是char类型变量的地址.我哪里错了?那么这是如何工作的呢?

#include<iostream>
#include<string>

using namespace std;

int main()
{
    char *notes[] = {"Ab", "F#", "B", "Gb", "D"};
    cout << *(char**)(notes+2);
}
Run Code Online (Sandbox Code Playgroud)

char**那里的演员是什么?它的意义是什么?

das*_*ght 8

从这个意义上讲,char *notes[]means notes[]是一个指向char的数组指针

这意味着它nodes是一个数组char*,即一个字符指针数组.

notes[] 的元素应该都是char类型变量的地址.

C隐式地将字符串文字(即用双引号括起来的字符序列)转换为以空字符结尾的C字符串,并生成初始字符的地址作为添加到数组的指针.这就是数组初始化的方式.

以下是如何将数据放入内存的示例:

Address Value Character
------- ----- ---------
1000000    65 A
1000001    98 b
1000002    00 NULL terminator
1000003    70 F
1000004    35 #
1000005    00 NULL terminator
1000006    66 B
1000007    00 NULL terminator
1000008    71 G
1000009    98 b
1000010    00 NULL terminator
1000011    68 D
1000012    00 NULL terminator
Run Code Online (Sandbox Code Playgroud)

然后你的指针数组将初始化如下:

notes = {1000000, 1000003, 1000006, 1000008, 1000011};
Run Code Online (Sandbox Code Playgroud)

注意:上面的布局只是一个例子.字符串文字可能不一定背靠背地放在内存中.