【正确答案】
【答案解析】指针可以随时指向任意类型的内存块,而数组可以在静态存储区被创建。例如,全局数组可以在栈上被创建。从原理与定义上看,虽然指针与数组表示的是不同的概念,但指针却可以方便地访问数组或者模拟数组,两者存在着一种貌似等价的关系,但也存在着诸多不同之处,主要表现在以下两个方面:
1)修改内容不同。
例如,char a[]="hello",可以通过取下标的方式对其元素值进行修改。例如,a[0]="X"是正确的,而对于char *P="world",此时P指向常量字符串,所以p[0]="X"是不允许的,编译会报错。
2)所占字节数不同。
例如,char *P="world",P为指针,则sizeof(p)得到的是一个指针变量的字节数,而不是P所指的内存容量。C/C++语言没有办法知道指针所指的内存容量,除非在申请内存时标记出来。
char a[]="hello world";
char *p=a;
在32位机器上,sizeof(a)=12字节,而sizeof(p)=4字节。
但需要注意的是,当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
void Func(char a[100])
{
cout<<sizeof(a);
}
此时sizeof(a)=sizeof(int)=4,而不是sizeof(int)*100=400。