這是一個基本的C編程問題C中的值賦值
以下聲明做了什麼?
int * doorptr, * doorlimit = is_open + NUM_DOORS;
我認爲它分配相同的值* doorptr和doorlim所以我試圖打印下面看:
#include <stdio.h>
#define NUM_DOORS 100
int main(int argc, char *argv[]){
int is_open[NUM_DOORS] = { 0 };
int * doorptr, * doorlimit = is_open + NUM_DOORS;
printf("doorptr: %p\n doorlimit: %p\n", doorptr, doorlimit);
printf("*doorptr: %d\n *doorlimit: %d\n", *doorptr, *doorlimit);
return 0;
}
但輸出是:
doorptr: 0xb777ec20
doorlimit: 0xbf86c0d0
*doorptr: 0
*doorlimit: -1217134592
請注意,不僅''doorlimit'是UB,而且'* doorptr'('is_open + NUM_DOORS'指向'is_open'的最後一個元素之後的一個點)。 – mafso
不要解除引用'doorlimit',因爲它超出了你的數組解引用它將導致未定義的行爲。 –
'doorptr':不初始化指針:垃圾值。 'doorlimit':'is_open [100]'的地址':'&is_open [100]'。 '* doorptr':垃圾桶值:UB,'is_open [NUM_DOORS]':數組範圍的下一個值:垃圾桶值。 – BLUEPIXY