在C++中,为什么提到指针的类型是必需的? 在C++中,提到指针的类型是必要的。比如说, int a = 5; int * p = &a;

在C++中,为什么提到指针的类型是必需的? 在C++中,提到指针的类型是必要的。比如说, int a = 5; int * p = &a;,c++,pointers,dereference,c++-concepts,C++,Pointers,Dereference,C++ Concepts,在这里,“int*”中的“int”是必需的。我发现的原因是 这是解引用所需要的。知道要读取的字节数,以及它们的解释和指针算法 然而,如果我写:- int a = 5; char * p = &a; float * p2 = &a; //etc 显示错误,表示无法将char*、float*等指针分配给int变量。好的,编译器知道我想要为其设置指针的变量的类型。这与普通变量不同,在普通变量中,编译器不确切知道我想要哪种类型。例如:- int a = 5; float b = 5;

在这里,“int*”中的“int”是必需的。我发现的原因是 这是解引用所需要的。知道要读取的字节数,以及它们的解释和指针算法

然而,如果我写:-

int a = 5;
char * p = &a;
float * p2 = &a;
//etc
显示错误,表示无法将char*、float*等指针分配给int变量。好的,编译器知道我想要为其设置指针的变量的类型。这与普通变量不同,在普通变量中,编译器不确切知道我想要哪种类型。例如:-

int a = 5;
float b = 5;
double c = 5;
long d = 5;
char e = 5;
所有这些都很好。我需要在这里编写类型,因为编译器不知道我想要哪种类型,因为所有这些都可以工作

但是,对于指针,它知道我要为其声明指针的变量的确切类型

即使我使用显式类型转换,我仍然会在某种程度上告诉我需要的指针类型,并且仍然必须指定正确的指针类型

int a = 5;
char * b = (char*)&a;//This would work.
//However this,
int * b = (char*)&a;
//wouldn't, as even with typecasting, c++ knows exactly the type of pointer we need.

< >我的问题是,当C++知道指针的类型时,为什么不自动设置指针的类型?如果指针类型错误,为什么不自动设置

如果将b声明为auto,编译器将使用类型推断并确定类型本身。但是,如果使用特定类型,则必须是正确的类型

如果将b声明为auto,编译器将使用类型推断并确定类型本身。但是,如果使用特定类型,则必须是正确的类型

一个可能的原因是数据的字节级操作


例如,您可以有一个void*指针指向某些内部字节数据,这些数据可以通过*int或*char或任何您需要的指针来访问,具体取决于您希望如何在其上读取或写入数据

一个可能的原因是数据的字节级操作


例如,您可以有一个void*指针指向某些内部字节数据,这些数据可以通过*int或*char或任何您需要的指针来访问,具体取决于您希望如何在其上读取或写入数据

提到类型表示内存将如何存储数据,特别是内存案例的数量,每种类型的数据都有自己的大小,例如参见sizeof,使用低级语言解决内存和硬件问题

例如,double的内存表示形式与int或任何其他类型的数据不同,即使在隐式转换的情况下它们将打印与输出相同的值,但在堆栈中,它们不是完全相同的值。因此编译器在指针的情况下不允许这样做


使用关键字auto可以管理您正在查找的内容。

提到类型表示内存将如何存储数据,特别是内存案例的数量,每种类型的数据都有自己的大小,例如,请参阅sizeof,使用低级语言解决内存和硬件问题

例如,double的内存表示形式与int或任何其他类型的数据不同,即使在隐式转换的情况下它们将打印与输出相同的值,但在堆栈中,它们不是完全相同的值。因此编译器在指针的情况下不允许这样做


使用关键字AutoC可以管理你正在寻找的。

你知道AutoType吗?C++类型检查是一种祝福,而不是一种限制。一个可能的原因是数据的字节级操作。例如,您可以使用一个void*指针指向某些内部字节数据,这些数据可以通过*int或*char访问,具体取决于您想在其上读取或写入数据的方式;这正是你想要的。它会自动设置指针的类型。指针类型不是通用的,只有一些特殊情况。不管解决手动、自动、decltype的方法是什么,确切的类型很重要。有关指针变量类型如何简单地更改行为的示例。int[]a={1,2};双*x=双*a;x+=1;int b=int*x;/??你是否知道AutoType?C++类型检查是一种祝福,而不是一种限制。一个可能的原因是数据的字节级操作。例如,您可以使用一个void*指针指向某些内部字节数据,这些数据可以通过*int或*char访问,具体取决于您想在其上读取或写入数据的方式;这正是你想要的。它会自动设置指针的类型。指针类型不是通用的,只有一些特殊情况。不管解决手动、自动、decltype的方法是什么,确切的类型很重要。有关指针变量类型如何简单地更改行为的示例。int[]a={1,2};双*x=双*a;x+=1;int b=int*x;/??注意:该类型仍然是必需的,只是不能手动键入。。我避免在琐碎的类型和t上使用auto
带有简单别名的软管,例如“auto*”的类型并不比“int*”简单,并且会降低透明度,仅“auto”一词也会丢失重要的视觉指针指示器。0.02嗨,谢谢你的回答,我还有疑问。如果C++总是自动确定类型,那么C++的功能会是什么?编译时间会慢一些。输出二进制文件应该完全相同。有时代码中有类型有助于可读性。如果需要,请选择使用它们。非常感谢,到目前为止,这对我来说是最有意义的。注意:该类型仍然是必需的,只是不要手动键入。。我避免在普通类型和具有简单别名的类型上使用auto,例如,“auto*”的类型不比“int*”简单,并且会降低透明度,“auto”本身也会丢失重要的可视指针指示器。0.02嗨,谢谢你的回答,我还有疑问。如果C++总是自动确定类型,那么C++的功能会是什么?编译时间会慢一些。输出二进制文件应该完全相同。有时代码中有类型有助于可读性。当它出现时,我更愿意使用它们。非常感谢,这对我来说是最有意义的。谢谢你的回答。我实际上提到了原因。我知道为什么需要这种类型。我想知道的是,C++与AutoAutoWork一起工作,会出什么问题?或者是后来实现的,然后自动选项被给出了?谢谢你的回答。我实际上提到了原因。我知道为什么需要这种类型。我想知道的是,C++与AutoAutoWork一起工作,会出什么问题?或者是后来实现的,然后给了自动选项?