转自: http://www.cppblog.com/cxiaojia/archive/2011/12/23/shuzuming.html
1、地址相同,大小不同
看下面代码:
arr为数组名,p为指针。
第3、4行输出的值一样,也就是说arr和p都是数组的首地址。第5、6行的结果不一样,arr的大小是整个数组的大小,而p的大小是指针的大小。
为什么arr的大小会是40?
2、都可以用指针作为形参
指针的形参当然是指针。数组的形参可以是数组,也可以是指针。下面代码印证了数组的形参可以是指针。
这点可以看出,数组名完全可以当成指针来用。
3、指针可以自加,数组名不可以
当数组名自加时程序编译就会出错,从这点应该可以看出,数组名是一个常量(const 修饰)。
4、作为参数的数组名的大小和指针的大小相同
arr的大小变为4、arr++成功编译可以确定,作为参数的arr已经完全变成了一个指针。
以上就是我所知道的指针与数组名的区别,如果还有别的区别请留言告诉我,如果谁知道数组名到底是一种什么样的结构,也请留言告知,谢谢哈。
看下面代码:
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
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 }
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++;
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
2 {
3 cout<< sizeof(arr)<<endl; // 结果为4
4 arr++; // 编译成功
5 }
6
arr的大小变为4、arr++成功编译可以确定,作为参数的arr已经完全变成了一个指针。
以上就是我所知道的指针与数组名的区别,如果还有别的区别请留言告诉我,如果谁知道数组名到底是一种什么样的结构,也请留言告知,谢谢哈。