我真的很困惑这种类型的指针定义:
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**那里的演员是什么?它的意义是什么?
从这个意义上讲,
char *notes[]meansnotes[]是一个指向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)
注意:上面的布局只是一个例子.字符串文字可能不一定背靠背地放在内存中.
| 归档时间: |
|
| 查看次数: |
184 次 |
| 最近记录: |