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++ 编译器如何知道指针的类型 double d=1.1; 双*p=&d; 无法澄清chris post。 当您声明double*p时,您明确地告诉编译器“我正在声明一个指向double的指针”。在编译过程中,编译器会记住,在引用p(遵循范围规则)的代码的每个部_C++_Pointers - Fatal编程技术网

C++ 编译器如何知道指针的类型 double d=1.1; 双*p=&d; 无法澄清chris post。 当您声明double*p时,您明确地告诉编译器“我正在声明一个指向double的指针”。在编译过程中,编译器会记住,在引用p(遵循范围规则)的代码的每个部

C++ 编译器如何知道指针的类型 double d=1.1; 双*p=&d; 无法澄清chris post。 当您声明double*p时,您明确地告诉编译器“我正在声明一个指向double的指针”。在编译过程中,编译器会记住,在引用p(遵循范围规则)的代码的每个部,c++,pointers,C++,Pointers,编译器如何知道指针的类型 double d=1.1; 双*p=&d; 无法澄清chris post。 当您声明double*p时,您明确地告诉编译器“我正在声明一个指向double的指针”。在编译过程中,编译器会记住,在引用p(遵循范围规则)的代码的每个部分中,p是指向一个双精度的指针,扩展而言,p是指向与双精度大小相同的内存位置的指针。因此,无论在哪里看到p,编译器都知道“p是一个指向大小为double的double的指针”。您在声明指针时告诉了它类型。double*p是指向大小已知的doub

编译器如何知道指针的类型
double d=1.1;
双*p=&d;
无法澄清chris post。

当您声明
double*p
时,您明确地告诉编译器“我正在声明一个指向double的指针”。在编译过程中,编译器会记住,在引用
p
(遵循范围规则)的代码的每个部分中,
p
是指向一个双精度的指针,扩展而言,
p
是指向与双精度大小相同的内存位置的指针。因此,无论在哪里看到
p
,编译器都知道“
p
是一个指向大小为double的double的指针”。

您在声明指针时告诉了它类型。
double*p
是指向大小已知的
double
的指针。不要混淆指针的大小和它所指向的类型的大小。我认为过于简单化了。但可能适合OP。我同意这是一种过度简化。但试图写出C/C++编译器如何处理类型和指针可能是一篇多页的文章。当然,我不是一个很好的解释复杂概念的人,因为它很简单。您可以通过尝试输出一个
void*p
来确认这种类型的推断。编译器将出错,因为它无法推断要取消引用的内存大小。您必须首先键入指针,以允许编译器取消引用正确的内存大小。这是一个有趣的附录。你可以做一些疯狂的事情,比如
long*lp=static\u cast(p)
,即使所说的
p
指向的是
double
(可能是无意义的结果,除非你做的是快速平方根倒数),
Cat
(例如,一个类Cat的实例),或者
bool
(祝贺你,你没有读到你现在应该读的部分记忆,你的未来可能会有seg故障。希望你不要写信给它)。有时你必须做一些疯狂的事情,但是…首先要寻找其他选项,配置文件以确保它确实让事情变得更好,并留下大量的咒骂性删除评论警告,解释你做了什么,为什么这么做,以及它在给定平台上是如何工作的。明确说明平台。只要一个编译er的修改可能会使魔术停止工作。
double d = 1.1;
double *p = &d;
cout << *p;
int i = 1;
int * q = &i;
cout << *q;