这可能有点奇怪,但我找不到指针指针类型的合理答案,例如char**
?
请记住指针不是类型。
答案 0 :(得分:5)
保持指针不是一个类型。
嗯,指针 是一种类型的意义上的类型。但实际上,指针这个词并没有指定任何特定的类型。同样,指向指针的指针也不是一种类型。另一方面,指向char
的指针是一种类型。
考虑以下命题,这是真的:“(指向类型的指针)是一种类型”。注意命题是递归的。因为“指向类型的指针”是一个“类型”,你可以用“指针类型”替换“类型”,最后得到以下命题也是如此:“(指向(指向类型的指针))是一种类型”。
所以,正如我所说,char**
是一种类型。它属于指针类型。类型为char**
的对象指向类型为char*
的对象,该对象也是指针类型。 char*
指向类型为char
的对象,该对象不是指针类型。
答案 1 :(得分:2)
您可以将计算机RAM视为具有大量箱子的大型仓库。定义新变量并设置其值时,如下所示:
char c = 'A';
您在内存中的某处创建了一个新框(例如,地址为0x12345678)。其长度等于char
数据类型的长度(1个字节),其值设置为'A'
。
之后,您可以创建一个新变量,它是指向c
:
char* pointer_to_c = &c;
在这里,您可以在内存中的其他位置创建一个新框(例如,在地址0x1234567C处)。它的长度等于char*
数据类型的长度(32位系统上的4个字节),其值设置为c
(0x12345678
)的地址。
之后,您可以创建一个新变量,它是指向pointer_to_c
:
char** pointer_to__pointer_to_c = &pointer_to_c;
在这里,您可以在内存中的其他位置创建一个新框(例如,在地址0x12345680处)。其长度等于char**
数据类型的长度(32位系统上的4个字节),其值设置为pointer_to_c
(0x1234567C
)的地址。
您可以在调试监视窗口中查看存储在指针变量中的地址,或将其打印到控制台或文件中,如下所示:
cout << std::hex << pointer_to_c << endl;
因此,指向指针的指针是一个变量,它存储存储指针的存储器中的地址 希望它会有所帮助