是什么æ„æ€ï¼ˆæ•°æ®ç±»åž‹*)0

时间:2012-06-07 13:59:27

标签: c

我ç»åŽ†äº†sizeof operator equivalent。

size_t size = (size_t)(1 + ((X*)0));

但无法ç†è§£(int*)0 or (int*)1000çš„å«ä¹‰æ˜¯ä»€ä¹ˆã€‚

告诉对编译器有什么作用?为什么添加给他们?你能详细说明å—?

3 个答案:

答案 0 :(得分:3)

(int *)0表示“将0视为整数的地å€â€ã€‚å‘此添加一个获å–内存中“下一个â€æ•´æ•°çš„地å€ã€‚因此,将结果转æ¢å›žæ•´æ•°å¯ä»¥å¾—到整数的大å°ã€‚

但是,这å–决于未定义的行为,因此您ä¸åº”该使用它。

答案 1 :(得分:1)

è¿™åªæ˜¯åˆ›å»ºä¸€ä¸ªæŒ‡å‘地å€0的指针。 å‘它添加1确实会增加指针。 这具有使地å€ä¸Žæ•°æ®ç±»åž‹çš„大å°ä¸€è‡´çš„效果。 在该示例中,size将包å«ç±»X的大å°ï¼Œå› ä¸ºæŒ‡é’ˆå°†æŒ‰ç±»X的大å°å‰è¿›ï¼Œå¹¶ä¸”因为åˆå§‹æŒ‡é’ˆå€¼ä¸ºé›¶ã€‚

答案 2 :(得分:1)

  

了解(int*)0或(int*)1000çš„å«ä¹‰æ˜¯ä»€ä¹ˆã€‚

这些åªæ˜¯æ¼”员表,与第二行完全相åŒï¼š

int a = 25;
short b = (short)a;

å°†a投射到shortå¯è®©æ‚¨å°†å€¼åˆ†é…ç»™b,该short被输入为(int*)0。与0å®Œå…¨ç›¸åŒ - 您åªæ˜¯å‘Šè¯‰ç¼–译器将int视为指å‘(int*)1000的指针。

关于投射的事情是,你实际上是在告诉编译器:“看,我知é“我在这里åšä»€ä¹ˆï¼Œæ‰€ä»¥åšæˆ‘告诉你的事情并åœæ­¢æŠ±æ€¨ä¸åŒ¹é…的类型。â€è¿™æ„味ç€ä½ ç¡®å®žéœ€è¦çŸ¥é“你在åšä»€ä¹ˆï¼Œä»¥åŠæœ€ç»ˆä»£ç çš„效果是什么。包å«åƒ{{1}}这样的表达å¼çš„任何代ç éƒ½å¯èƒ½æ˜¯a)高度怀疑和b)éžå¸¸ä¾èµ–于编译器以åŠç¼–写代ç çš„å¹³å°çš„细节。它å¯èƒ½åœ¨æŸç§åµŒå…¥å¼ç³»ç»Ÿä¸­æœ‰æ„义,因为您å¯ä»¥æŽ§åˆ¶æ•´ä¸ªç³»ç»Ÿï¼Œå› æ­¤æ‚¨çŸ¥é“在内存ä½ç½®1000会å‘生什么。一般æ¥è¯´ï¼Œä½ åº”该é¿å…这样的代ç ã€‚