我们都知道,c语言中数组名是一个指针,比如下面这段代码
#include<iostream>
using namespace std;int main(){ int a[4]={1,2,3,4}; for(int i=0;i<4;i++) { cout<<*(a+i);//*(a+i)和a[i]是等价的。 cout<<endl; } return 0;}但是看下面这个代码
#include<iostream>
using namespace std;int main(){ int a[4]={1,2,3,4}; cout<<"数组长度"<<sizeof(a)<<endl; int *p; cout<<"整形指针的长度为:"<<sizeof(p)<<endl; p=a; cout<<"指向整形数组后指针的长度为:"<<sizeof(p)<<endl; return 0;}
运行结果为:数组的长度为16
整形指针的长度为:4
指向整形数组后指针的长度为:4
*********************************
问题来了:既然数组名a是指针,为什么sizeof(a)和sizeof(p)得到的结果是不一样的呢?是不是说数组名不仅仅是指针呢?
我是这样理解的,数组名就是指针,而且是个常指针,而sizeof一个长指针和一个同类型的指针变量得到的结果是不一样的。