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,我ä¸çŸ¥é“编译器如何从指针获å–有关类型的信æ¯ã€‚
ç”案 0 :(得分:3)
澄清克里斯帖。
å½“ä½ å£°æ˜Ždouble *p
æ—¶ï¼Œä½ æ˜Žç¡®å‘Šè¯‰ç¼–è¯‘å™¨â€œæˆ‘æ£åœ¨å£°æ˜Žä¸€ä¸ªæŒ‡å‘double的指针â€ã€‚在编译期间,编译器然åŽè®°ä½ï¼Œåœ¨å¼•ç”¨p
的代ç çš„æ¯ä¸ªéƒ¨åˆ†ä¸ï¼ˆéµå¾ªèŒƒå›´è§„则),p
是指å‘double的指针,并且通过扩展,{{1是指å‘与double相åŒå¤§å°çš„内å˜ä½ç½®çš„指针。所以在它看到p
的任何地方,编译器都知é““p
是一个指å‘double的两å€å¤§å°çš„指针â€ã€‚