首页 / C++ / C++中数组和指针的区别
C++中数组和指针的区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++中数组和指针的区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2107字,纯文字阅读大概需要4分钟。
内容图文
![C++中数组和指针的区别](/upload/InfoBanner/zyjiaocheng/1162/13addb1619174feebbb2bcde028ddb78.jpg)
刚接触指针的时候,你很可能会觉得:数组和指针基本上是同一个东西。的确,数组和指针都可以用*取值,都可以加减某个数获得别的指针,都可以用[]来取值……例如下面的代码:
int arr[5] = {2, 3, 5, 7, 9}; //定义一个数组,长度为5
int* arr_ptr = arr; //定义一个指针指向数组arr
cout << "*arr = " << *arr << "\t*(arr + 3) = " << *(arr + 3) << "\t\tarr[3] = " << arr[3] << endl;
cout << "*arr_ptr = " << *arr_ptr << "\t*(arr_ptr + 3) = " << *(arr_ptr + 3) << "\tarr_ptr[3] = " << arr_ptr[3] << endl;
/*
输出:
*arr = 2 *(arr + 3) = 7 arr[3] = 7
*arr_ptr = 2 *(arr_ptr + 3) = 7 arr_ptr[3] = 7
*/
嗯,看来数组和指针确实很像。但是数组和指针并不是完全等价的,一个简单的例子就是sizeof:
int arr[5]; //定义一个数组,长度为5
int* arr_ptr = arr; //定义一个指针指向数组arr
cout << "Size of arr: " << sizeof arr << endl; //输出20,20 = 4 * 5
cout << "Size of arr_ptr: " << sizeof arr_ptr << endl; //输出8(在64位系统上)
面对数组,sizeof运算符(注意sizeof不是函数)求出了这个数组所占所有空间的大小(一个int占4字节,5个int占了20字节);但是面对指针arr_ptr,sizeof直接求出了arr_ptr这个int*类型的变量的大小。在64位系统上,一个内存地址需要8字节来存储,所以sizeof arr_ptr
就是8。
利用c++的typeinfo头文件,我们还可以直接看看这些变量的类型是什么:
int arr[5] = {2, 3, 5, 7, 9}; //定义一个数组,长度为5
auto arr_ptr = arr; //定义一个指针指向数组arr
auto new_ptr = new int[5]; //new出来5个int类型对象
cout << "Type of arr: " << typeid(arr).name() << endl; //输出A5_i,表示arr是一个长度为5的int类型数组
cout << "Type of arr_ptr: " << typeid(arr_ptr).name() << endl; //输出Pi,表示arr_ptr的类型是int的指针
cout << "Type of new_ptr: " << typeid(new_ptr).name() << endl; //也输出Pi
可以发现,arr的类型是数组,而且这个类型里自带了数组的长度;而无论是直接定义出来的指针变量还是new的返回值,类型都是指针。数组和指针是两种不同的类型。
另外,数组加减一个int之后,也会变成指针;两个指针相减,则会返回long类型。
cout << "Type of (arr + 1): " << typeid(arr + 1).name() << endl; //输出Pi
cout << "Type of (arr_ptr + 1): " << typeid(arr_ptr + 1).name() << endl; //输出Pi
cout << "Type of (arr - arr_ptr): " << typeid(arr - arr_ptr).name() << endl; //输出l
另外一个区别是:指针变量是可以赋值的,一个指针可以从前指向位置1、后来指向位置2;而数组是不能被赋值的。
int arr1[5], arr2[5];
int* ptr = arr1;
ptr = arr2; //可以
arr1 = arr2; //不可以,error: array type ‘int [5]‘ is not assignable
原文:https://www.cnblogs.com/RabbitHu/p/14616890.html
内容总结
以上是互联网集市为您收集整理的C++中数组和指针的区别全部内容,希望文章能够帮你解决C++中数组和指针的区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。