Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么有不同类型的指针?_C++_C_Pointers - Fatal编程技术网

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++

首先,如果这个问题很愚蠢,我很抱歉 我是C/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个字节。将数据类型指定给指针,告诉它应该读取多少字节。这称为解引用,这样指针就知道应该从它指向的地址读取多少数据。是的,这一点很好。出于某种原因,我假设了这一点,但并没有在我的回答中指出这一点。非常感谢。此外,如果没有适当的大小,指针算法将无法工作。