我想测试我能不能改变常量指针,它指向下一个数组的第一个元素测试时我得到了一些奇怪的输出,我不明白:指向数组第一个元素的常量指针的指针是如何工作的?
//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 **')。 –