C ++中的整数数组指针实现

时间:2015-05-21 23:55:12

标签: c++ arrays pointers

int a[5]={1,2,3,5,6};
int *apnt= a;
while (*apnt)
{
 printf("The no is %d\n",*apnt);
 apnt++;
}

与字符串ä¸åŒï¼Œæˆ‘知é“数组末尾没有null元素。但是,无论刷新内存多少次,或é‡æ–°å¯åŠ¨xcode,我的代ç æ€»ä¼šæ供以下输出。这里å‘生了什么?有人å¯ä»¥ç»™æˆ‘一个è§è§£å—?

输出结果为:

The no is 1
The no is 2
The no is 3
The no is 5
The no is 6
The no is 32767
The no is 144723190
The no is 1694538263
The no is 1606416704
The no is 32767
The no is -1982110263
The no is 32767

2 个答案:

答案 0 :(得分:1)

读å–数组的末尾是undefined behavior。你所看到的,å³ä½¿ä½ çœ‹åˆ°äº†ä»€ä¹ˆï¼Œä¹Ÿæ— æ³•ç”¨C ++语言规则预测。

ä½ å¶ç„¶å¾—到这个输出,它å¯èƒ½åœ¨æ¯å°æœºå™¨ä¸Šéƒ½æœ‰æ‰€ä¸åŒï¼Œå³ä½¿æ˜¯æ¯æ¬¡è¿è¡Œä¹Ÿæ˜¯å¦‚此。 Here它åšäº†åˆ«çš„事情,但它确实å¯ä»¥å®Œå…¨ä»»ä½•äº‹æƒ…。

答案 1 :(得分:1)

我认为其他的回答者误解了你的问题的æ„图 - 我å‡è®¾ä½ ä¸æ˜¯è¯•å›¾åœ¨C ++中找到未定义的行为,åªæ˜¯æƒ³è¿­ä»£ä½ çš„数组。您的代ç ä¸­çš„问题是,您ä¸æ–­å°†æŒ‡é’ˆapnt递增超过数组的末尾。这是未定义的行为,任何事情都å¯èƒ½å‘生。

但是,通常在这ç§æƒ…况下会å‘ç”Ÿä»€ä¹ˆï¼Œæ‚¨å°†ç»§ç»­è¯»å– {/ 1}}数组之åŽçš„内存(函数中的其他局部å˜é‡ï¼‰ã€‚这就解释了为什么“乱ç â€è¾“出是å¯é¢„测的。您应该åªè¿­ä»£æ•°ç»„中的元素数é‡ï¼ˆä¾‹å¦‚,使用for循环),或者您å¯ä»¥åœ¨æ•°ç»„的末尾添加“0â€ï¼Œå› æ­¤while循环将终止。