C++ 为什么有不同类型的指针?
首先,如果这个问题很愚蠢,我很抱歉 我是C/C++的初学者 我的问题是: 为什么当我想指向像(C++ 为什么有不同类型的指针?,c++,c,pointers,C++,C,Pointers,首先,如果这个问题很愚蠢,我很抱歉 我是C/C++的初学者 我的问题是: 为什么当我想指向像(char x='a')这样的char变量时,我应该创建char数据类型的指针?像这个(char*pnt=&x)?我认为地址应该始终是内存中任意位置的整数,因此我的示例中的变量x在转换(65)为某个地址中的二进制后,以这种格式(01000001)存储在RAM中。。所以有一个char类型的地址 我不理解这个概念,有什么解释吗?那是因为C/C++中的强类型。这是一个范例(Python使用不同的例子),但C++
char x='a'
)这样的char
变量时,我应该创建char数据类型的指针?像这个(char*pnt=&x
)?我认为地址应该始终是内存中任意位置的整数,因此我的示例中的变量x在转换(65)为某个地址中的二进制后,以这种格式(01000001)存储在RAM中。。所以有一个char类型的地址
我不理解这个概念,有什么解释吗?那是因为C/C++中的强类型。这是一个范例(Python使用不同的例子),但C++中唯一的可能。实际上,您可以使用有关指针类型的知识,在类型之间转换指针。使用静态\u cast、动态\u cast等进行此操作。另外,如果您使用的是C,那么您可以定义指向“某物”的指针-void*。这一个可以指向char、int或其他您可以想象的类型。注意:这种转变应该是有意识的。这可能是糟糕的体系结构或其他问题的征兆。在底层,它们都只是指向内存的指针,工作原理相同。类型系统是顶部的C++层的一部分,它帮助您确保您不访问,例如,<代码> int >代码>错误地作为<代码>浮动< /代码>。内存本身无法区分差异。通过这种方式,可以在编译时进行类型检查,并防止您(或至少它试图防止您)犯错误。因此有一个char类型NO的地址。内存地址始终是整数。这里,
char*pnt=&x
表示变量pnt
存储包含char类型数据的内存位置的地址(始终为整数)。因此,不同的指针类型告诉编译器指针指向的内存位置存储的数据类型。这是因为为不同的数据类型分配的大小不同。因此,如果它是一个整数,将分配2个字节,对于char,它是1个字节。将数据类型指定给指针,告诉它应该读取多少字节。这称为解引用,这样指针就知道应该从它指向的地址读取多少数据。是的,这一点很好。出于某种原因,我假设了这一点,但并没有在我的回答中指出这一点。非常感谢。此外,如果没有适当的大小,指针算法将无法工作。