在此代码中,ar
和&ar
相同。但是ar
不就是一个指向ar[0]
的常量指针吗?那么我想写cout<<ar;
应该给ar[0]
的记忆地址,而写cout<<&ar;
应该给它自己的记忆地址,所以它们应该是不同的。它们怎么一样?有人说ar
不是指针,如果它不是指向ar[0]
的指针,那么cout<<*ar
等于ar[0]
的值如何?
int ar[3] = {1,2,3};
cout<<ar<<endl;
cout<<&ar<<endl;
我的意思是在这个代码中,&a
和&b
是不同的,这是有道理的。
int a = 5;
int* b = &a;
cout<<&a<<endl;
cout<<&b<<endl;
int ar[3] = {1,2,3};
ar
这里是一个"数组指示符",它自动转换为指向第一个数组元素的指针。ar
相当于&a[0]
。这样ar
就有一个类型int *
&ar
ia 指向整个数组的指针,类型为int (*)[3]
以下代码有效(指针兼容)
int *par0 = ar;
int (*par)[3] = &ar;
尽管a
和&a
具有不同的类型,但它们具有相同的值 — 第一个数组元素和整个数组的地址是相同的。