file 1:
int mango[100];
file 2:
extern int *mango;
...
/* some code that references mango[i] */
当两者都被*(mango+i)
访问时,我们为什么会收到错误?
æ¤å¤–,如果char mango[5];
,则数组从ä½ç½®èŠ’果开始,以便mango=&mango[0]
。所以å˜é‡'mango'包å«è‡ªèº«çš„地å€æˆ–数组的第一个å—符?
ç”案 0 :(得分:4)
如果您定义å˜é‡a
,例如:
char a[5];
然åŽæ‚¨å®šä¹‰äº†ä¸€ä¸ªåŒ…å«äº”(5)个å—符的数组。å¯ä»¥é€šè¿‡a[0]
或简称*a
访问的第一个å—符的地å€å为“a
â€ã€‚该数组也称为“a
â€ï¼Œå› ä¸ºè¯¥æ•°ç»„ä»¥å…¶ç¬¬ä¸€ä¸ªå…ƒç´ çš„åœ°å€å‘½å,如程åºå‘˜åœ¨æ•°ç»„声明ä¸ç»™å‡ºçš„é‚£æ ·ã€‚
æ— æ³•é€šè¿‡åˆ†é…a
æ¥æ›´æ”¹a
的地å€ã€‚å¦‚æžœä½ è¯•å›¾å†™ï¼š
a = NULL;
您收到的错误应表明左值(å¯èƒ½å‡ºçŽ°åœ¨èµ‹å€¼è¿ç®—符左侧的值)。
ç”案 1 :(得分:2)
å˜é‡a
表示一个å—ç¬¦æ•°ç»„ï¼Œå› æ¤ï¼Œå®ƒæ˜¯ä¸€ä¸ªç»‘定到地å€çš„å˜é‡ï¼Œè¯¥åœ°å€ä¿å˜æ•°ç»„的第一个å—符的值。当数组å作为å‚æ•°ä¼ é€’ç»™å‡½æ•°æˆ–åœ¨èµ‹å€¼è¿ç®—符的å³ä¾§ä½¿ç”¨æ—¶ï¼Œå®ƒä»¬ä¼šè¡°å‡ï¼ˆå³ï¼Œè¢«éšå¼è½¬æ¢ï¼‰ä¸ºæŒ‡å‘æ•°ç»„ç¬¬ä¸€ä¸ªå…ƒç´ çš„æŒ‡é’ˆã€‚å› æ¤æ•°ç»„ä¸æ˜¯æŒ‡é’ˆï¼Œä½†ç”±äºŽéšå¼è½¬æ¢ï¼Œå®ƒä»¬å¯ä»¥åƒè®¸å¤šCå’ŒC ++æ“作ä¸çš„æŒ‡é’ˆä¸€æ ·ä½¿ç”¨ã€‚
è¯è™½è¿™ä¹ˆè¯´ï¼Œå¦‚æžœä½ åœ¨ä¸€ä¸ª.c文件ä¸å®šä¹‰char a[4];
,然åŽå°†è¯¥å£°æ˜ŽåŒ…å«åœ¨å¦ä¸€ä¸ª.c文件ä¸ï¼Œè¯¥æ–‡ä»¶æœ‰ä¸€ä¸ªå为char* a
çš„å˜é‡ï¼Œé‚£ä¹ˆC编译器就会出现抱怨åŒä¸€ä¸ªå˜é‡çš„多个定义。