我想測試我能不能改變常量指針,它指向下一個數組的第一個元素測試時我得到了一些奇怪的輸出,我不明白:指向數組第一個元素的常量指針的指針是如何工作的?
//Constant pointer to pointer to constant value
void test(int const * * const a) {
//printf("%d", **a); //Program crashes (2)
(*a)++;
}
int main()
{
int a[5] = { 1,2,3,4,5 };
test(&a);
printf("%d", *a); //Prints 5 as output (1)
return 0;
}
我預計編譯當我嘗試編譯(* a)++時出現錯誤,但是我可以運行代碼,但是當我嘗試打印元素時,我得到一個奇怪的值(1)。
然後我想打印出數組第一個元素的值(2)。當我嘗試這個時,程序崩潰。
謝謝你,那是一個很棒的解釋! – Agnaroc
我發現它很有啓發性,當'a'是一個數組時,我發現'printf(「%p \ n」,a);''和'printf(「%p \ n」,&a);''會打印相同的地址! – Prayag
'&a ''具有類型'int(*)[5]',而不是你所說的。另外,由於這不是數組類型,因此它不會衰減(更不用說衰減到'int **')。 –