Posted on 2011-12-23 22:27
C小加 阅读(3025)
评论(2) 编辑 收藏 引用 所属分类:
C++和面向对象
数组名是指针么?如果不是,数组名到底是怎样的一种结构?求解释。
我叙述一下我所知道的数组名与指针的区别。
1、地址相同,大小不同看下面代码:
1 int arr[10];
2 int* p=arr;
3 cout<<arr<<endl;
4 cout<<p<<endl;
5 cout<<sizeof(arr)<<endl;//结果为40
6 cout<<sizeof(p)<<endl;//结果为4
arr为数组名,p为指针。
第3、4行输出的值一样,也就是说arr和p都是数组的首地址。第5、6行的结果不一样,arr的大小是整个数组的大小,而p的大小是指针的大小。
为什么arr的大小会是40?
2、都可以用指针作为形参指针的形参当然是指针。数组的形参可以是数组,也可以是指针。下面代码印证了数组的形参可以是指针。
1 void fun(int* p)
2 {
3 cout<<p[0]<<endl;
4 }
5
6
7 int main()
8 {
9 int arr[10]={0};
10 int* p=arr;
11 fun(arr);
12
13 return 0;
14 }
这点可以看出,数组名完全可以当成指针来用。
3、指针可以自加,数组名不可以1 int arr[10]={0};
2 int* p=arr;
3 arr++;
4 p++;
当数组名自加时程序编译就会出错,从这点应该可以看出,数组名是一个常量(const 修饰)。
4、作为参数的数组名的大小和指针的大小相同1 void fun(int arr[])
2 {
3 cout<<sizeof(arr)<<endl;//结果为4
4 arr++;//编译成功
5 }
6
arr的大小变为4、arr++成功编译可以确定,作为参数的arr已经完全变成了一个指针。
以上就是我所知道的指针与数组名的区别,如果还有别的区别请留言告诉我,如果谁知道数组名到底是一种什么样的结构,也请留言告知,谢谢哈。