编译器如何知é“指针的类型

时间:2016-05-24 19:05:34

标签: c++ pointers

double d = 1.1;
double *p = &d;
cout << *p;
int i = 1;
int * q = &i;
cout << *q;

在上é¢çš„代ç ä¸­ï¼Œå½“我们å–消引用指针p(cout&lt;&lt; * p;)时,编译器如何知é“*p的大å°ï¼Ÿæˆ‘çš„æ„æ€æ˜¯ï¼Œå¦‚æžœdouble的大å°æ˜¯8并且d的地å€ä»Ž1000开始,那么编译器如何知é“它应该从1000到1007çš„æ•°æ®ï¼Œè€Œå¯¹äºŽ*q,它应该如何需è¦4个字节?

由于på’Œq的大å°éƒ½æ˜¯4,我ä¸çŸ¥é“编译器如何从指针获å–有关类型的信æ¯ã€‚

1 个答案:

答案 0 :(得分:3)

澄清克里斯帖。 当你声明double *p时,你明确告诉编译器“我正在声明一个指å‘double的指针â€ã€‚在编译期间,编译器然åŽè®°ä½ï¼Œåœ¨å¼•ç”¨p的代ç çš„æ¯ä¸ªéƒ¨åˆ†ä¸­ï¼ˆéµå¾ªèŒƒå›´è§„则),p是指å‘double的指针,并且通过扩展,{{1是指å‘与double相åŒå¤§å°çš„内存ä½ç½®çš„指针。所以在它看到p的任何地方,编译器都知é““p是一个指å‘double的两å€å¤§å°çš„指针â€ã€‚