int main(){
int a[4] = { 1,2,3,4 };
int(*b)[4] = &a; //with a doesn't work
cout << a << &a << endl; //the same address is displayed
}
因此,int(*b)[4]
是一个指向int数组的指针。我试图用&a
和a
来初始化它。它只适用于第一个。
它们不都是数组第一个元素的地址吗?
C++指向int数组的指针
int main(){
int a[4] = { 1,2,3,4 };
int(*b)[4] = &a; //with a doesn't work
cout << a << &a << endl; //the same address is displayed
}
因此,int(*b)[4]
是一个指向int数组的指针。我试图用&a
和a
来初始化它。它只适用于第一个。
它们不都是数组第一个元素的地址吗?
C++指向int数组的指针
从概念上讲,它们不是一回事。即使他们指向相同的地址,它们是不兼容的指针类型,因此它们的用法也不同。
&a
正在采用类型为int [4]
的数组的地址),那么它意味着指向数组的指针(即int (*)[4]
)。
a
这里引起array-to-pointer decay,那么它意味着指向int
(即int*
)。
看看这段代码
int a[4] = { 1, 2, 3, 4 } // array
int(*b) = a // pointer to the first element of the array
你应该知道,int(*b)
等于int(*b)[0]
和a[0]
。 因此,它是一个指向整数(int*)
的指针,而不是指向整数数组的指针。
你的情况如何出现类型问题。
注意到C是强类型语言。看看你的任务说明。
int(*b)[4] = &a;
它需要一个参数int(*ptr)[4]
。这意味着您必须严格通过该类型的参数,即int *
。
而你正试图传递一个指针到数组4 int
到int *
。因此,他们在作业中不兼容,即使他们的地址也是一样的。
你的意思是“初始化”,而不是“实例化” –
指针有一个类型; (即它们是地址和类型)。这不起作用的原因是'int x; double * p =&x;'不起作用。 –
@P。 Danielski:如果两者都是从内存中的相同位置开始的,你将如何区分“阵列的第一个元素的地址”和“整个阵列的地址”?一个类似的例子:struct S {int x; } s;'。然后'&s'和'&s.x'是相同的数字地址。那么,那么'&s'是什么:整个结构对象的地址或它的第一个字段的地址? – AnT