处ç†a [i]å’Œ*(a + 1)的方å¼ä¹‹é—´çš„差异

时间:2011-07-26 20:52:09

标签: c++ c arrays pointers

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'包å«è‡ªèº«çš„地å€æˆ–数组的第一个字符?

2 个答案:

答案 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编译器就会出现抱怨åŒä¸€ä¸ªå˜é‡çš„多个定义。