当前位置:编程学习 > C/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 修饰)。

www.zzzyk.com
4、作为参数的数组名的大小和指针的大小相同

1 void fun(int arr[])
2 {
3     cout<<sizeof(arr)<<endl;//结果为4
4     arr++;//编译成功
5 }
6
arr的大小变为4、arr++成功编译可以确定,作为参数的arr已经完全变成了一个指针。

以上就是我所知道的指针与数组名的区别,如果还有别的区别请留言告诉我,如果谁知道数组名到底是一种什么样的结构,也请留言告知,谢谢哈。

摘自 C小加
 

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,