在此代码ar
和&ar
中相同。但是ar
并不只是指向ar[0]
的常量指针吗?那么我想写cout<<ar;
应该给ar[0]
的内存地址,而写cout<<&ar;
应该给它{自己的记忆地址,因此应该有所不同。它们如何相同?有人说ar
不是一个指针,而不是cout<<*ar
等于ar[0]
的值,如果它不是指向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;
答案 0 :(得分:1)
int ar[3] = {1,2,3};
ar
是一个“数组指示符”,其中自动强制转换指向第一个数组元素的指针。
ar
等同于&a[0]
。这样ar
的类型为int *
&ar
是指向整个数组的指针,类型为int (*)[3]
以下代码有效(指针兼容)
int *par0 = ar;
int (*par)[3] = &ar;
尽管a
和&a
具有不同的类型,但它们具有相同的值-第一个数组元素的地址和整个数组的地址相同。