点赞保代码,点赞避bug!
int nums[] = { 1,2,3 };
int* p = &nums[0];//p是nums数组第一个元素的指针
cout << p << endl;
int* p1 = nums;//p1也是nums数组第一个元素的指针
cout << p1 << endl;
if (p == p1) {
cout << "p=p1" << endl;
}
很多用到数组名字(如nums)的地方编译器自动将其替换成指向数组(nums)第一个元素(nums[0])的指针;
auto p2(nums);//p2是一个指向nums[0]的整型指针
cout << p2 << endl;
if (p == p1 && p1 == p2) {
cout << "p=p1,p1=p2" << endl;
}
数组被用作decltype关键字的参数,或者作为取地址符(&)、sizeof及typeid等运算符的运算对象时,上述转换不会发生。同样的,如果用一个引用来初始化数组,上述转换也不会发生。